如何创建一个可以由rundll32.dll调用的动态库

 csdn上有个网友问这个问题,google了一下,发现C#无法实现这个功能。不过还是挺有意思的。

说起来简单,你的动态库必须实现一个叫EntryPoint的接口,rundll32.dll会loadlibrary并调用这个函数:

void CALLBACK
  EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);

Rundll会执行下列步骤:

  1. 它分析命令行。
  2. 它通过 LoadLibrary() 加载指定的 DLL。
  3. 它通过 GetProcAddress() 获取 <entrypoint> 函数的地址。
  4. 它调用 <entrypoint> 函数,并传递作为 <optional arguments> 的命令行尾。
  5. 当 <entrypoint> 函数返回时,Rundll.exe 将卸载 DLL 并退出。

参见:

INFO:Windows Rundll 和 Rundll32 接口

http://support.microsoft.com/default.aspx/kb/164787

posted @ 2009-01-31 06:18  蔡秋心  阅读(299)  评论(0编辑  收藏  举报