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 可以打开命令行  脚本  网页

 

posted @ 2020-09-04 13:25  特权E5  阅读(289)  评论(0编辑  收藏  举报