DllMain中CreateDialog界面卡死

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
HWND hWnd = CreateDialog((HINSTANCE)hModule, MAKEINTRESOURCE(IDD_DIALOG_MAIN), NULL, DialogProc);
ShowWindow(hWnd, SW_SHOW);
}
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

INT_PTR CALLBACK DialogProc(
In HWND hwndDlg,
In UINT uMsg,
In WPARAM wParam,
In LPARAM lParam)
{
switch (uMsg)
{
case WM_CLOSE:
PostQuitMessage(0);
break;
default:
break;
}
return FALSE;
}

3个回答

消息处理函数加上
default:
return DefWindowProc(hwndDlg, uMsg, wParam, lParam);

qq_21545763
Depressed Man 回复caozhy: 我上传了代码 大师帮我看看
一年多之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复qq_21545763: 那说明你的程序还有别的问题。
一年多之前 回复
qq_21545763
Depressed Man 还是不行
一年多之前 回复

创建窗口的代码要放在另一个线程里(再创一个线程,代码网上有)
不然会 “阻塞”

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c++/clr dll工程中,定义一个全局对象,退出dll释放时,atlunadvise返回rpc_e_wrong_thread
环境:c++/clr,引用c# dll 1.一个类CManager,其中定义了一个引用过c# dll的类对象,该对象会调用c#的函数 2.定义一个全局对象CManager g_global,CManager类中创建一个连接点指针 3.CManager的构造函数中,创建了连接点指针atladvise返回值S_OK 4.该dll被一个exe引用,其中函数都正常,现让exe退出 5.在dllmain中,dll detach时,主动调用g_global析构,释放的时候atlunadvise返回rpc_e_wrong_thread, 求大神指点一下,谢谢!
使用openprocessmemory如何打开并且修改dllmain的地址
用openprocessmemory可以打开并且修改dllmain的地址么?dll入口地址和dll函数导入表的地址的关系是什么?
DLL文件初始化例程失败问题
工作原因,需要在windows系统上手动加载dll文件 windows提供了一个 rundll32.exe可以调用dll文件 我的启动方式是: rundll32.exe+dll文件+dllmain ![图片说明](https://img-ask.csdn.net/upload/201909/19/1568875913_207172.jpg) 但是会出现初始化例程失败的问题 ![图片说明](https://img-ask.csdn.net/upload/201909/19/1568876022_486795.jpg) 该dll经查询是使用Delphi编写的文件,用depends查询也补齐了所需的依赖项 好久都没解决这问题,难受。 前来请教各位大佬们 无尽感谢!
关于linux的.so入口函数
windows下dll有入口函数dllmain,可以在dllmain里做一些操作,如释放全局变量等。 那linux下的so有入口函数吗?没有的话全局变量需要怎么释放??
添加利用Svchost启动的dll服务,无法启动怎么解决?
添加一个利用Svchost启动的DLL共享服务,在注册表已成功添加,但在服务界面就是启动不起来,会报错126:找不到指定模块。 ![图片说明](https://img-ask.csdn.net/upload/201909/23/1569227274_167077.png)![图片说明](https://img-ask.csdn.net/upload/201909/23/1569227368_277597.png) ![图片说明](https://img-ask.csdn.net/upload/201909/23/1569227412_149725.png) 查了很多说该错误是因为dll文件有问题,有没有大佬帮忙看一下dll文件错在哪? dllmain.cpp: ![图片说明](https://img-ask.csdn.net/upload/201909/23/1569227627_961704.png) service.h: ``` #pragma once #include "stdafx.h" #ifdef __cplusplus extern "C" { #endif __declspec(dllexport) VOID WINAPI ServiceMain(DWORD dwArgc, LPCTSTR* lpszArgv); #ifdef __cplusplus } #endif ``` service.cpp: ``` #include "service.h" #include "stdafx.h" SERVICE_STATUS_HANDLE g_service_status_handle = NULL; SERVICE_STATUS g_service_status = { SERVICE_WIN32_SHARE_PROCESS, SERVICE_START_PENDING, SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_PAUSE_CONTINUE }; DWORD WINAPI ServiceHandler(DWORD dwControl, DWORD dwEventType, LPVOID lpEventData, LPVOID lpContext) { switch (dwControl) { case SERVICE_CONTROL_STOP: case SERVICE_CONTROL_SHUTDOWN: g_service_status.dwCurrentState = SERVICE_STOPPED; break; case SERVICE_CONTROL_PAUSE: g_service_status.dwCurrentState = SERVICE_PAUSED; break; case SERVICE_CONTROL_CONTINUE: g_service_status.dwCurrentState = SERVICE_RUNNING; break; case SERVICE_CONTROL_INTERROGATE: break; default: break; }; SetServiceStatus(g_service_status_handle, &g_service_status); return NO_ERROR; } extern "C" __declspec(dllexport) VOID WINAPI ServiceMain(DWORD dwArgc, LPCTSTR* lpszArgv) { g_service_status_handle = RegisterServiceCtrlHandlerEx(TEXT("Svchost Service"), ServiceHandler, NULL); if (!g_service_status_handle) { return; } g_service_status.dwCurrentState = SERVICE_RUNNING; SetServiceStatus(g_service_status_handle, &g_service_status); while (TRUE) { Sleep(1000); OutputDebugString(TEXT("Hello Topsec In Svchost")); } return; }; ```
怎样设置VS的编译选项,生成Debug版的静态库(lib)?
各位前辈,我在开发中遇到了这样一个问题: 我手头有一个静态库,有代码,并且分别在debug和release模式下成功编译出了不同版本的lib库文件。我在其它的项目中需要链接这个库,并且Debug版本的程序链接debug版本的静态库,release版本的程序链接release版本的静态库。现在的情况是,release版本的程序生成成功,debug版本的程序提示链接错误: Logger_D.lib(StaticLogger.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”(dllmain.obj 中) 查看网上的信息,都说是链接的库的debug版本或release版本不匹配,可是我明明是编译并链接了对应版本的静态库啊~ 于是一不做二不休,在release版本的程序中链接了debug版的静态库试试——竟然也能成功!这说明我根本就没有成功生成debug版本的静态库!可是将编译选项翻了一遍又一遍,就是找不出原因~ 恳请各位前辈指教,到底应该怎样设置编译选项,生成Debug版本的静态库啊?
C#程序关闭,进程还在运行
写了一个C#的程序,调用了一个C++的dll,在C++的DLLMain中下面这样写的,特意在DLL_PROCESS_DETACH中关闭了线程,但那个MessageBox在关闭C#程序时并没有弹出来,是不是意味着我所有在dll中开的线程都没关闭?为什么会这样呢? ``` BOOL APIENTRY DllMain( HMODULE hModule, // handle to DLL module DWORD ul_reason_for_call, // reason for calling function LPVOID lpReserved // reserved ) { // Perform actions based on the reason for calling. switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: // Initialize once for each new process.Return FALSE to fail DLL load. { SetDllNCCallback(rtm_InterpStartEnd); SendNCDriverUserDecodeEvent(); pctr_dataShm = (LPCTRDATA)malloc(sizeof(Shmctr_data));//初始化全局控制变量 if(pctr_dataShm == NULL) { MessageBox(NULL,TEXT("can not alloc heapmemory in pctr_dataShm"),TEXT("Interpolation Error"),NULL); return 1; } hrtm_PositCtrl_Trd = CreateThread(NULL, 0, rtm_PositCtrl_Trd, NULL,CREATE_SUSPENDED, NULL); SetThreadPriority(hrtm_PositCtrl_Trd, THREAD_PRIORITY_TIME_CRITICAL); ResumeThread(hrtm_PositCtrl_Trd); hrtm_VelCtrl_Trd = CreateThread(NULL, 0, rtm_VelCtrl_Trd, NULL,CREATE_SUSPENDED, NULL); SetThreadPriority(hrtm_VelCtrl_Trd, THREAD_PRIORITY_HIGHEST); ResumeThread(hrtm_VelCtrl_Trd); hrtm_DecodFifo_Trd = CreateThread(NULL, 0, rtm_DecodFifo_Trd, NULL,CREATE_SUSPENDED, NULL); SetThreadPriority(hrtm_DecodFifo_Trd, THREAD_PRIORITY_ABOVE_NORMAL); ResumeThread(hrtm_DecodFifo_Trd); hrtm_Intrp_Trd = CreateThread(NULL, 0, rtm_Intrp_Trd, NULL,CREATE_SUSPENDED, NULL); SetThreadPriority(hrtm_Intrp_Trd, THREAD_PRIORITY_NORMAL); ResumeThread(hrtm_Intrp_Trd); hrtm_Prd_2ms = CreateThread(NULL,0,rtm_Prd_2ms,0,0,NULL); break; } case DLL_THREAD_ATTACH: //MessageBox(NULL,TEXT("Enter DLL_THREAD_ATTACH"),TEXT("Interpolation Inform"),NULL); break; case DLL_THREAD_DETACH: //MessageBox(NULL,TEXT("Enter DLL_THREAD_DETACH"),TEXT("Interpolation Inform"),NULL); break; case DLL_PROCESS_DETACH: CloseHandle(hrtm_PositCtrl_Trd); free(pctr_dataShm); //释放全局控制量 pctr_dataShm = NULL; CloseHandle(hrtm_PositCtrl_Trd); CloseHandle(hrtm_VelCtrl_Trd); CloseHandle(hrtm_DecodFifo_Trd); CloseHandle(hrtm_Intrp_Trd); CloseHandle(hrtm_Prd_2ms); MessageBox(NULL,TEXT("Leave Interpolation dll"),TEXT("Interpolation Inform"),NULL); break; } return TRUE; } ```
c++ WH_GETMESSAGE 钩子 ,勾住程序,但是回调函数没执行,请教
需要拦截目标程序的显示和关闭窗口消息。照搬网上的代码。显示注入DLL成功。但是回调函数并没有执行。请教 ``` #include "stdafx.h" #include <stdio.h> #include <stdlib.h> HHOOK hooker; HWND notepadhandle; BOOL handled; extern "C" __declspec(dllexport) LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam); char* ConvertInttoChar(int i); BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) { if(ul_reason_for_call==DLL_PROCESS_ATTACH) { handled=FALSE; notepadhandle=FindWindow(TEXT("Notepad"),NULL); if(notepadhandle==NULL) { printf("Notepad Not Found.\n"); return TRUE; } hooker=SetWindowsHookEx(WH_GETMESSAGE,HookProc,(HINSTANCE)hModule,GetWindowThreadProcessId(notepadhandle,NULL)); if(hooker) { OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE,(DWORD)notepadhandle); printf("hookpro:%d\n",HookProc); printf("hmodule:%d\n",hModule); printf("pid:%d\n",notepadhandle); printf("Hook Successfully.\nHookID:%d\n",hooker); } else { printf("Hook Failed.\nError:%d\n",GetLastError()); return TRUE; } //PostMessage(notepadhandle,WM_CLOSE,0,0); //printf("发送关闭指令"); } if(ul_reason_for_call==DLL_PROCESS_DETACH) { UnhookWindowsHookEx(hooker); return TRUE; } return TRUE; } extern "C" __declspec(dllexport) LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam) { printf("NCOD111"); if(nCode<0) { printf("NCOD<0"); return CallNextHookEx(hooker,nCode,wParam,lParam); } tagMSG* msg; msg=(tagMSG*)lParam; if(nCode==HC_ACTION && (msg->message==WM_CLOSE)) { if(handled==FALSE) printf("拦截到消息:%d\n",msg->message); handled=TRUE; UnhookWindowsHookEx(hooker); msg->message=WM_NULL; return CallNextHookEx(hooker,nCode,wParam,(LPARAM)msg); } printf("LAST"); return CallNextHookEx(hooker,nCode,wParam,lParam); } ``` 执行的结果,DLLmain的代码能正常执行,并显示注入成功;但是回调函数中的打印代码均没执行,请教。 执行结果 hookpro:1666846815 hmodule:1666777088 pid:4063406 Hook Successfully. HookID:17567643
C# 使用 Widgets must be created in the GUI thread
在使用C#调用qt的dll时,第一次调用的一般没事,第二,三次就会出现Widgets must be created in the GUI thread。 这是我用的qt中的代码 BOOL WINAPI DllMain( HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpvReserved*/ ) { static bool ownApplication = FALSE; if ( dwReason == DLL_PROCESS_ATTACH ) { ownApplication = QMfcApp::pluginInstance( hInstance ); } if ( dwReason == DLL_PROCESS_DETACH && ownApplication ) { delete qApp; } return TRUE; } 这是C#中调用qt的代码 myfun1 = new DLDApi(); myfun1.LoadDll(@"D:\MvcAAA\MvcAAA\bin\meshlab.dll"); // 加载 "Count.dll" myfun1.LoadFun("Test"); // 调入函数 count, "_count@4" 是它的入口,可通过 Depends 查看 object[] Parameters = new object[] { (int)5}; // 实参为 0 Type[] ParameterTypes = new Type[] { typeof(int) }; // 实参类型为 int DLDApi.ModePass[] themode = new DLDApi.ModePass[] { DLDApi.ModePass.ByValue }; // 传送方式为值传 Type Type_Return = typeof(int); // 返回类型为 int // 弹出提示框,显示调用 myfun.Invoke 方法的结果,即调用 count 函数 int i = (int)myfun1.Invoke(Parameters, ParameterTypes, themode, Type_Return); myfun1.UnLoadDll(); C#代码在运行**UnLoadDll**卸载dll方法后,DLL_PROCESS_DETACH中断delete app并没有被执行,整个dll里面有一个qt的线程,卸载了dll后线程并没有被关闭,导致第二次运行的时候无法再次创建QWidegt对象。 想要请教以下各位,如何让在调用完dll后让中的线程关闭掉。是应该写在C++的这个dll中还是写在C#的调用中, 同时这个qt的dll中有一个对象My3Doperation,这个对象继承与QWidget,如何在使用完这个对象后将创建的线程彻底删除。 extern "C" __declspec(dllexport) int Test(int fileName) { My3Doperation model; //计算代码 return fileName+5; }
dll入口地址和dll函数导入表的地址的关系是什么?
dll入口地址和dll函数导入表的地址的关系是什么?用openprocessmemory可以打开并且修改dllmain的地址么?
dll引用之后出现的问题
在一个C#项目中需要用到音频控件,所以下载了NCT的控件,引用了AxInterop.NCTAUDIOEDITOR2Lib.dll和Interop.NCTAUDIOEDITOR2Lib.dll,首先出现嵌入互操作集间接引用的问题,修改两个引用的属性的嵌入互操作类型为false,之后出现正尝试在 OS 加载程序锁内执行托管代码。不用尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起 关掉vs2010的MDA的LoaderLock之后出现 Protection Error Debugger detected - please close it down and restart! Windows NT users: Please note that having the WinICE/SoftIce service installed means that you are running a debugger! 导致无法调试,请帮忙解决,困扰很久了,谢谢
Hook实现3389连接在任务管理器中隐身,任务管理器隐藏指定已连接用户!
出处:http://blog.sina.com.cn/s/blog_717e88030100xrj1.html // dllmain.cpp #include "stdafx.h" extern "C" _declspec(dllexport) bool HideUserSession(TCHAR* wcsUserName, int iLen); TCHAR gUserName[128]; int gLen; static BOOL (WINAPI* TrueWTSQuerySessionInformation)( __in HANDLE hServer, __in DWORD SessionId, __in WTS_INFO_CLASS WTSInfoClass, __out LPTSTR *ppBuffer, __out DWORD *pBytesReturned ) = WTSQuerySessionInformation; BOOL WINAPI HookWTSQuerySessionInformation( __in HANDLE hServer, __in DWORD SessionId, __in WTS_INFO_CLASS WTSInfoClass, __out LPTSTR *ppBuffer, __out DWORD *pBytesReturned ){ TrueWTSQuerySessionInformation(hServer, SessionId, WTSInfoClass, ppBuffer, pBytesReturned); if(strncmp((char*)*ppBuffer, (char*)gUserName, gLen) == 0){ return false; } return true; } BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: { ZeroMemory(gUserName, 128 * 2); HideUserSession(L"sqluser", sizeof(L"sqluser")); break; } case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: //DetourTransactionBegin(); //DetourUpdateThread(GetCurrentThread()); //DetourDetach(&(PVOID&)TrueWTSQuerySessionInformation, HookWTSQuerySessionInformation); //DetourTransactionCommit(); break; } return TRUE; } extern "C" _declspec(dllexport) bool HideUserSession(TCHAR* wcsUserName, int iLen){ CopyMemory(gUserName, wcsUserName, iLen); gLen = iLen; DetourRestoreAfterWith(); DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourAttach(&(PVOID&)TrueWTSQuerySessionInformation, HookWTSQuerySessionInformation); LONG error = DetourTransactionCommit(); if (error == NO_ERROR) { //::MessageBox(NULL, L"load detours success!", L"tips", 0); return true; } else { //::MessageBox(NULL, L"load detours failed!", L"tips", 0); return false; } } 无意发现,觉得有点意思,但是以上源码本人编译不通过,在下菜鸟学者,求助高手!
全局键盘钩子函数的回调函数有时无效
``` DLL代码: myHooke.c #include "myHooke.h" #include <windows.h> #include <winuser.h> #include <stdlib.h> #include <stdio.h> int ndown = 0; HHOOK hhkHook = NULL; //定义钩子句柄 HINSTANCE hInstance = NULL; //程序实例 BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } hInstance = (HINSTANCE)hModule; //得到DLL实例 return TRUE; } //回调函数 __declspec(dllexport) LRESULT CALLBACK myHookProc(int nCode, WPARAM wParam, LPARAM lParam) { LRESULT Result=CallNextHookEx(hhkHook, nCode, wParam, lParam); if(wParam == 'M' && (lParam & 0x40000000)) { printf("M is downed ! %d\n", ndown++); } return Result; } //加载钩子 int load() { if(!(hhkHook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)myHookProc, hInstance, 0))) { return FALSE; } return TRUE; } //卸载钩子 int unload() { return UnhookWindowsHookEx(hhkHook); } myHooke.h: #ifndef MYHOOKD_H #define MYHOOKD_H #define EXPORT __declspec(dllexport) #define _WIN32_WINNT 0x400 EXPORT int load(); EXPORT int unload(); #endif 调用的函数: #include <windows.h> #include <winuser.h> #include <stdio.h> #include <stdlib.h> typedef int (*FUNCTION)(); int main(int argc, char *argv[]) { HINSTANCE hDll; FUNCTION loadhook = NULL; FUNCTION unloadhook = NULL; hDll = LoadLibrary("..\\myHooke\\Debug\\myHooke.dll"); if(hDll != NULL) { loadhook = (FUNCTION)GetProcAddress(hDll, "load"); unloadhook = (FUNCTION)GetProcAddress(hDll, "unload"); if(loadhook == NULL) { MessageBox(0, "loadhook failed", "MyHook", MB_OK); return 1; } if(unloadhook == NULL) { MessageBox(0, "unloadhook failed", "MyHook", MB_OK); return 1; } if(!loadhook()) { return 1; } // while(1) { printf("hook is load !"); MessageBox(0, "Hold on box", "MyHook", MB_OK); //使用循环会使程序卡住,所以用了MessageBox是程序暂停 Sleep(1000); } unloadhook(); FreeLibrary(hDll); } return 0; } ``` 有些出口可以获取键盘消息,有些不能获取键盘消息,这是全局钩子,我是菜鸟,求大神帮助啊!!! 补充一下,程序运行时,切换到其他程序,有的可以获取键盘消息,printf有响应;有的没有任何响应,比如切换到网页等; 我想实现的功能是:无论在哪里,只要键盘按下,我的程序就会有响应 打印按键被按下的消息
关于Win32核心编程中DLL注入后无反应的解决办法
#include<stdio.h> #include<windows.h> HINSTANCE hProcess; PWSTR pszLibFileRemote; HINSTANCE hThread; void StartInject(int ProcessID, char * DllName); void OverInject(char * DllName); void EnableDebugPrivilege(HANDLE processHandle); int main(int argc, char* argv[]) { int processid = 0; char DllName[50] = "Win32DLL.dll"; while (1) { //ZeroMemory(DllName, sizeof(DllName)); printf("please input the process id:\n"); scanf("%d", &processid); EnableDebugPrivilege(GetCurrentThread()); StartInject(processid, DllName); OverInject(DllName); } return 0; } void StartInject(int ProcessID, char * DllName) { //打开进程,申请访问; hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, ProcessID); if (hProcess == NULL) { printf("进程不允许访问!"); getchar(); exit(0); } int cch = 1 + lstrlenW(DllName); int cb = cch * sizeof(WCHAR); pszLibFileRemote = (PWSTR)VirtualAllocEx(hProcess, NULL, cb, MEM_COMMIT, PAGE_READWRITE);//为DllName在远程线程空间分配内存; if (pszLibFileRemote == NULL) { printf("在远程线程空间为DllName分配内存失败!"); getchar(); exit(0); } if (!WriteProcessMemory(hProcess, pszLibFileRemote, (PVOID)DllName, cb, NULL)) { printf("在拷贝DllName到远程线程内存地址空间时失败!"); getchar(); exit(0); } /*得到LoadLibraryW在内核(kernel32.dll中的地址)*/ PTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE) GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryW"); if (pfnThreadRtn == NULL) { printf("在得到函数地址时出现错误:\n函数名:LoadLibraryW(加载动态链接库)"); getchar(); exit(0); } hThread = CreateRemoteThread(hProcess, NULL, 0,pfnThreadRtn, pszLibFileRemote, 0, NULL); if (hThread == NULL) { printf("创建远程线程失败,错误代码:%d",GetLastError()); getchar(); exit(0); } } void OverInject(char * DllName) { if (DllName != NULL) VirtualFreeEx(hProcess, DllName, 0, MEM_RELEASE); if (hThread != NULL) CloseHandle(hThread); if (hProcess != NULL) CloseHandle(hProcess); } void EnableDebugPrivilege(HANDLE processHandle) { HANDLE hToken; LUID sedebugnameValue; TOKEN_PRIVILEGES tkp; if (!OpenProcessToken(processHandle, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) { printf("OpenProcessToken"); return; } if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sedebugnameValue)) { printf("LookupPrivilegeValue"); CloseHandle(hToken); return; } tkp.PrivilegeCount = 1; tkp.Privileges[0].Luid = sedebugnameValue; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof tkp, NULL, NULL)) { printf("AdjustTokenPrivileges"); CloseHandle(hToken); } } 然后DLL中是这样的: #include<stdio.h> #include<windows.h> int WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved) { switch (fdwReason) { case DLL_PROCESS_ATTACH: //The DLL is being mapped into the process's address space. MessageBoxW(NULL, "这是一个确定 取消的消息框!", "标题", MB_OKCANCEL); break; case DLL_THREAD_ATTACH: //A thread is being created. break; case DLL_THREAD_DETACH: //A thread is exiting cleanly. break; case DLL_PROCESS_DETACH: //The DLL is being unmapped from the process's address space. break; } /*MessageBoxW(NULL, "这是一个确定 取消的消息框!", "标题", MB_OKCANCEL);*/ return(TRUE); // Used only for DLL_PROCESS_ATTACH }
c++ dll注册 细节问题
怀疑一个dll被恶意加了时间锁 现象:2017年2月1日之后程序出现异常 经过分析是一个dll(类似ocx功能),无论是注册Regsvr32 还是通过TSTCON32.EXE进行加载改dll,一个程序关键注册表被修改,这个注册表和该dll没有任何关系 dll的部分源码: STDAPI DllRegisterServer(void) { // registers object, typelib and all interfaces in typelib return _Module.RegisterServer(TRUE); } BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/) { if (dwReason == DLL_PROCESS_ATTACH) { _Module.Init(ObjectMap, hInstance, &LIBID_UICHANNELLib); DisableThreadLibraryCalls(hInstance); } else if (dwReason == DLL_PROCESS_DETACH) _Module.Term(); return TRUE; // ok } 搜索整个dll的源码也没有修改注册表相关操作,也没有对时间2017-2-1的判断。 大神给点思路。
能否利用.rgs文件重写COM组件的注册??
遇到以下问题请高手解答 已知: 1.在名为X.DLL的文件中包含一个COM组件,使用regsv32注册提示找不到入口点dll。 2.使用查看器发现,registerserver但是该DLL文件没有导出dllregisterserver ,dllmain 等函数. 3.用#import 导入可以生成.tlb和.tli文件 4.用VC++2013打开,可以发现用于注册的脚本文件.rgs 问题: 1.怎么才能注册其中的组件? 2.CRegObject类中有一个成员函数名为ResourceRegister的函数,原型为: HRESULT ResourceRegister( LPCOLESTR resFileName , UINT nID , LPCOLESTR szType);通过指定包含注册脚本资源的文件,以及资源ID、资源类型实现注册。 ATL中的自动注册就调用了类似函数。但是在控制台程序中创建此类对象,并调用这个函数会运行时引发内存错误,这个函数具体该怎么使用? 3.是否有人能详细说一下,ATL中实现COM组件注册的详细过程,以便参考
VS2013+wdk8.1下虚拟打印驱动安装后无法打印
各位大神,我最近开始接触虚拟打印,要做一个虚拟打印的程序,功能就是保存为位图,环境是win7 VS2013 + wdk8.1,我使用的是wdk下genprint例子改写PrintDocumentOnPrintProcessor函数。使用inf文件用安装向导安装成功了,但是打印时没有任何反应,在dbgView下调试发现只有dllMain函数被调用,其他函数都没有被调用。我试了很多方法都无法解决不灵,困挠我快一个月了,请求各路大神指点一二,不胜感激。
利用detours Hook全局API的问题
在下利用微软的detours写了一个Hook全局MessageBox的dll,代码比较短,先贴下,然后再说问题: ``` #include"HookDll.h" #include <detours.h> #pragma comment(lib, "detours.lib") #pragma data_seg("Shared") HHOOK mHook = NULL; HINSTANCE hInstance = NULL; #pragma data_seg() int (WINAPI* OLD_MessageBoxW)(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType) = MessageBoxW; int (WINAPI* OLD_MessageBoxA)(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType) = MessageBoxA; //自定义的代替函数 int WINAPI NEW_MessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType) { int ret = OLD_MessageBoxW(hWnd, L"已经被Hook!", L"Hook", uType); return ret; } int WINAPI NEW_MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType) { int ret = OLD_MessageBoxA(hWnd, "已经被Hook", "Hook", uType); return ret; } //启动Hook VOID Hook() { DetourRestoreAfterWith(); DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); //Hook MessageBoxW和MessageBoxA DetourAttach(&(PVOID&)OLD_MessageBoxW, NEW_MessageBoxW); DetourAttach(&(PVOID&)OLD_MessageBoxA, NEW_MessageBoxA); DetourTransactionCommit(); } //撤销Hook VOID UnHook() { DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); //撤销Hook DetourDetach(&(PVOID&)OLD_MessageBoxW, NEW_MessageBoxW); DetourDetach(&(PVOID&)OLD_MessageBoxA, NEW_MessageBoxA); DetourTransactionCommit(); } //挂钩函数 LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam) { return CallNextHookEx(mHook, nCode, wParam, lParam); } //导出函数,安装一个针对WH_CALLWNDPROC的全局钩子 //WH_CALLWNDPROC:当目标线程调用SendMessage发送消息时,钩子函数被调用 extern "C" __declspec(dllexport) BOOL WINAPI Start() { mHook = ::SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, hInstance, 0); return mHook != NULL; } //卸载钩子 extern "C" __declspec(dllexport) void WINAPI Stop() { ::UnhookWindowsHookEx(mHook); } BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH://当DLL被某个进程加载时,执行该case下的语句体 { //在这里干两件事:1.启动Hook,Hook MessageBox // 2.获取本DLL的句柄 //之所以只调用一次Hook,后面解释 static int num = 1; if (1==num) { ++num; Hook(); } hInstance = (HINSTANCE)hModule; break; } case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH://当DLL将被卸载时,执行下面的语句体 { //UnHook(); //如果这里加上UnHook(),那MessageBox就不能被Hook了,后面再详述 break; } } return TRUE; } ``` 在下在另一个MFC程序中加载上面的DLL,并且调用Start启动钩子。 按照在下的想法,当一个程序(假设为A)调用SendMessage函数发送消息时,系统会强行将该DLL映射到程序A的地址空间,并且执行case DLL_PROCESS_ATTACH下的语句体,即调用Hook函数,Hook程序A的MessageBox。 但事实是这样的: 在下在另一个C++程序中调用MessageBoxW,发现如下情况: 1.如果在case DLL_PROCESS_DETACH的语句体中加上UnHook调用,那么,无论调用多少次MessageBoxW,没有一次是被Hook的。 2.鉴于1,在下猜想可能是在调用MessageBoxW前就先执行UnHook了,于是干脆就将UnHook注释掉了,这是在调用MessageBoxW,发现,第一次调用没有被Hook,而后面再调用MessageBoxW就被Hook了。但这只是在下写的C++程序的表现,对于其它程序,如记事本,还依然没被Hook。 3.修改上面的DLL,不Hook MessageBox了,而改为Hook CopyFileW和Hook CopyFileA,这时,电脑上的复制粘贴都没有被Hook,自己写程序调用CopyFileW也没有被Hook,但是,在调用CopyFileW前调用一次MessageBoxW,后面的CopyFileW就被Hook了。 综上,在下的理解是:程序的一些行为,如调用MessageBox,才会导致调用SendMessage,进而导致加载DLL,这时才Hook相应的API。 在下想要的效果是:只要我运行一个程序(比如前边的启动钩子的MFC程序),电脑上所有的MessageBox都被Hook了。 在下对Windows消息机制不是特别熟悉,不知道在下的想法有问题还是代码写的有问题,还请诸位大神指点一二。在下先行谢过!
Python 调用C++ dll库文件函数提示WindowsError: exception: access violation writing 0x00905A4D
.H文件如下: /* 视频解码 */ #ifndef __BLL_AUTELVIDEODECODE_H #define __BLL_AUTELVIDEODECODE_H #ifdef AUTELVIDEODECODE_EXPORTS #define AUTELVIDEODECODE_API __declspec(dllexport) #else #define AUTELVIDEODECODE_API __declspec(dllimport) #endif #include "bll/UDPClient/UDPAsyncClient.h" #include "bll/DataManager/DataManager.h" #include "bll/Utils/CommonFuntion.h" #include "bll/frame.h" #include "bll/video_data_mgn.h" #include "bll/h264.h" extern "C" { //编码 #include "libavcodec/avcodec.h" //封装格式处理 #include "libavformat/avformat.h" //像素处理 #include "libswscale/swscale.h" #include "libavutil/avutil.h" #include "libavutil/imgutils.h" }; #pragma comment(lib,"avutil.lib") #pragma comment(lib,"avformat.lib") #pragma comment(lib,"avcodec.lib") #pragma comment(lib,"swscale.lib") #define VIDEO_UDP_PORT (1234) #define min(a, b) ((a) < (b) ? (a) : (b)) #define MAX_RECVBUF_SIZE (64 * 1024) #define MAX_FRAME_SIZE (1024 * 1024) #pragma pack(push, 1) struct Decoder { AVCodec *codec; AVFrame *frame; AVCodecContext *dec_ctx; }; typedef struct { uint8_t *data; int size; int64_t pts; int keyframe; int decode_only; } VideoPacket; typedef struct { int width; int height; int64_t pts; int keyframe; int decode_only; int opaque; uint8_t *data; int size; } YuvFrame; #pragma pack(pop) typedef void (WINAPIV *yuvFrame_func)(YuvFrame *yuv); class AUTELVIDEODECODE_API CAutelVideoDecode { public: explicit CAutelVideoDecode(std::string strHost="", int nPort=VIDEO_UDP_PORT); ~CAutelVideoDecode(void); inline void SetYuvframeCallback(yuvFrame_func pfn) { m_pfnyuvFrame = pfn; } //functions private: //通过udp实时获取视频数据包线程 void StartRecvPacketThread(); void StopRecvPacketThread(); static int WINAPIV recv_video_data_func(char* buf, int length, void* ctx, void* pObj); void DoRecvPacket(); static DWORD ThRecvPacket(LPVOID lpParam); //从buf里面读取视频帧数据进行渲染线程 void StartRenderThread(); void StopRenderThread(); void DoRenderFrame(); static DWORD ThRenderFrame(LPVOID lpParam); Decoder *Decoder_Create(void); int Decoder_Destroy(); int Decoder_Decode(VideoPacket *inpkt, YuvFrame *frame); int get_video_frame(AVFrame *frame, YuvFrame *yuv); void PushFrame(YuvFrame frame); YuvFrame FrontFrame(); //params private: //通过udp实时获取视频数据包线程 HANDLE m_hRecvVideoPacket; bool m_bStopRecvVideoPacket; //从buf里面读取视频帧数据进行渲染线程 HANDLE m_hRenderFrame; bool m_bStopRender; CUDPAsyncClient *m_pUdpClient; std::string m_strHostAddr; int m_udpPort; Decoder *m_pDecoder; yuvFrame_func m_pfnyuvFrame; typedef std::queue<YuvFrame> QUEUE_YUVFRAME; QUEUE_YUVFRAME m_que_yuvframe; CRITICAL_SECTION m_cri_yuvFramequeLocker; }; #endif CPP文件 // dllmain.cpp : Defines the entry point for the DLL application. #include "stdafx.h" #include "AutelVideoDecode.h" BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } extern "C" { AUTELVIDEODECODE_API CAutelVideoDecode* AutelVideoDecode() { return new CAutelVideoDecode(); } AUTELVIDEODECODE_API void SetYuvframeCallback(CAutelVideoDecode* pAutel, yuvFrame_func pfn) { pAutel->SetYuvframeCallback(pfn); } } #####编译成AutelVideoDecode.dll库后供python2.7程序调用。 ####Python程序如下 import sys,pygame import YUVFrame import thread from ctypes import * ObjAutelvideodecodeDLL = windll.LoadLibrary(".\\bin\\autelvideodecode.dll") class AutoTestAutelRealTimeVideo: def __init__(self): pygame.init() self.size = width, height = 1280, 720 self.black = 0, 0, 0 self.YUVFrame = None self.overlay =None self.IYUV = pygame.IYUV_OVERLAY self.lock = thread.allocate_lock() CALLFUCTION = CFUNCTYPE(None, POINTER(YUVFrame.YUVFrame)) self.PrenderYuvframe = CALLFUCTION(self.renderYuvframe) #ObjAutelvideodecodeDLL.AutelVideoDecode.argtype=c_char_p ObjAutelvideodecodeDLL.AutelVideoDecode.restype = c_void_p ObjAutelvideodecodeDLL.SetYuvframeCallback.argtypes = (c_void_p,c_void_p) #ObjAutelvideodecodeDLL.SetYuvframeCallback.restype = None self.AutelObj = ObjAutelvideodecodeDLL.AutelVideoDecode() def ...... 编译后出错: Connected to pydev debugger (build 129.782) Traceback (most recent call last): File "C:\Program Files (x86)\JetBrains\PyCharm 2.7.3\helpers\pydev\pydevd.py", line 1481, in <module> debugger.run(setup['file'], None, None) File "C:\Program Files (x86)\JetBrains\PyCharm 2.7.3\helpers\pydev\pydevd.py", line 1124, in run pydev_imports.execfile(file, globals, locals) #execute the script File "E:/AutoTestAutelRealTimeVideo/AutoTestAutelRealTimeVideo.py", line 84, in <module> test() File "E:/AutoTestAutelRealTimeVideo/AutoTestAutelRealTimeVideo.py", line 66, in test test = AutoTestAutelRealTimeVideo() File "E:/AutoTestAutelRealTimeVideo/AutoTestAutelRealTimeVideo.py", line 25, in __init__ self.AutelObj = ObjAutelvideodecodeDLL.AutelVideoDecode() WindowsError: exception: access violation writing 0x00905A4D
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
阿里面试官问我:如何设计秒杀系统?我的回答让他比起大拇指
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图和个人联系方式,欢迎Star和指教 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n...
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
Android性能优化(4):UI渲染机制以及优化
文章目录1. 渲染机制分析1.1 渲染机制1.2 卡顿现象1.3 内存抖动2. 渲染优化方式2.1 过度绘制优化2.1.1 Show GPU overdraw2.1.2 Profile GPU Rendering2.2 卡顿优化2.2.1 SysTrace2.2.2 TraceView 在从Android 6.0源码的角度剖析View的绘制原理一文中,我们了解到View的绘制流程有三个步骤,即m...
微服务中的Kafka与Micronaut
今天,我们将通过Apache Kafka主题构建一些彼此异步通信的微服务。我们使用Micronaut框架,它为与Kafka集成提供专门的库。让我们简要介绍一下示例系统的体系结构。我们有四个微型服务:订单服务,行程服务,司机服务和乘客服务。这些应用程序的实现非常简单。它们都有内存存储,并连接到同一个Kafka实例。 我们系统的主要目标是为客户安排行程。订单服务应用程序还充当网关。它接收来自客户的请求...
致 Python 初学者们!
作者| 许向武 责编 | 屠敏 出品 | CSDN 博客 前言 在 Python 进阶的过程中,相信很多同学应该大致上学习了很多 Python 的基础知识,也正在努力成长。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 Python 这门编程语言,从2009年开始单一使用 Python 应对所有的开发工作,直至今...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip installselenium -ihttps://pypi.tuna.tsinghua.edu.cn/simple/ ...
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca...
SpringBoot2.x系列教程(三十六)SpringBoot之Tomcat配置
Spring Boot默认内嵌的Tomcat为Servlet容器,关于Tomcat的所有属性都在ServerProperties配置类中。同时,也可以实现一些接口来自定义内嵌Servlet容器和内嵌Tomcat等的配置。 关于此配置,网络上有大量的资料,但都是基于SpringBoot1.5.x版本,并不适合当前最新版本。本文将带大家了解一下最新版本的使用。 ServerProperties的部分源...
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ...... ...
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
2020年全新Java学习路线图,含配套视频,学完即为中级Java程序员!!
新的一年来临,突如其来的疫情打破了平静的生活! 在家的你是否很无聊,如果无聊就来学习吧! 世上只有一种投资只赚不赔,那就是学习!!! 传智播客于2020年升级了Java学习线路图,硬核升级,免费放送! 学完你就是中级程序员,能更快一步找到工作! 一、Java基础 JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。 在Java基础板块中有6个子模块的学...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
爬取薅羊毛网站百度云资源
这是疫情期间无聊做的爬虫, 去获取暂时用不上的教程 import threading import time import pandas as pd import requests import re from threading import Thread, Lock # import urllib.request as request # req=urllib.request.Requ...
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名...
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计...
HTML5适合的情人节礼物有纪念日期功能
前言 利用HTML5,css,js实现爱心树 以及 纪念日期的功能 网页有播放音乐功能 以及打字倾诉感情的画面,非常适合情人节送给女朋友 具体的HTML代码 具体只要修改代码里面的男某某和女某某 文字段也可自行修改,还有代码下半部分的JS代码需要修改一下起始日期 注意月份为0~11月 也就是月份需要减一。 当然只有一部分HTML和JS代码不够运行的,文章最下面还附加了完整代码的下载地址 &lt;!...
相关热词 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数 c#日期精确到分钟 c#自定义异常必须继承 c#查表并返回值 c# 动态 表达式树 c# 监控方法耗时 c# listbox c#chart显示滚动条
立即提问