DllMain

DllMain

BOOL WINAPI DllMain(

HANDLE hinstDLL,      句柄

 DWORD dwReason,     调用实际

LPVOID lpvReserved);    指定初始化和清理的其他方面

 

对于一个Dll模块,

DllMain函数是可选的

  dll加载和卸载的时候被调用,

  dll初始化和资源的释放

exe有个main或者WinMain入口函数一样,DLL也有一个入口函数,就是DllMain。

系统是在什么时候调用DllMain函数的呢?静态链接时,或动态链接时调用LoadLibrary和FreeLibrary都会调用DllMain函数。

DLL_PROCESS_ATTACH:

    进程启动

    loadlibrary,

    第一加载到进程地址空间

DLL_PROCESS_DETACH:

    进程结束

FreeLibrary,每次调用会减少引用计数,当计数值为0,则卸载dll

返回值:

  FALSE:

   进程启动中,会弹出一个错误,然后立刻调用DLLMain,并传入DLL_PROCESS_DETACH

main函数之前执行代码:

  1. dllmain

  2. 全局对象的构造

  3. 全局变量使用函数赋值

函数转发:   (又叫dll劫持)

   所导出的函数实现不在本dll,而在其他dll中

创建进程

WinExec(

"cmd /k copy D:\process.exe d:\1.exe",   文件名  可以是命令行

 SW_NORMAL);        窗口 sw_show参数相同

Uint ShellExecute(
HWND hwnd, //父窗口句柄
LPCSTR lpOperation, //操作类型
LPCSTR lpFile, //要进行操作的文件或路径
LPCSTR lpParameters, //当lpOperation为“explore”时指定要传递的参数,通常设为NULL
LPCSTR lpDirectory, //指定默认目录,通常设为NULL
INT nShowCmd //文件打开的方式,以通常方式还是最大化或最小化显示
)

 返回值大于32表示执行成功
  返回值小于32表示执行错误
  返回值可能的错误有: = 0 {内存不足}
  ERROR_FILE_NOT_FOUND = 2; {文件名错误}
  ERROR_PATH_NOT_FOUND = 3; {路径名错误}
  ERROR_BAD_FORMAT = 11; {EXE 文件无效}
  SE_ERR_SHARE = 26; {发生共享错误}
  SE_ERR_ASSOCINCOMPLETE = 27; {文件名不完全或无效}
  SE_ERR_DDETIMEOUT = 28; {超时}
  SE_ERR_DDEFAIL = 29; {DDE 事务失败}
  SE_ERR_DDEBUSY = 30; {正在处理其他 DDE 事务而不能完成该 DDE 事务}
  SE_ERR_NOASSOC = 31; {没有相关联的应用程序}

操作类型

Edit:编辑文件

Exporer:打开资源管理器(必须是目录)

Find:打开搜索对话框

Open:打开文档、可执行文件与文件夹

ShellExecute 可以打开命令行  脚本  网页

学如逆水行舟,不进则退。 博客园技术交流群 群 号:1073255314 (本群没人,刚刚建立 -_-!!! )
原文地址:https://www.cnblogs.com/Mj-NaijAm/p/13613291.html