在使用GetProcAddress()时遇到的问题。
typedef DWORD (WINAPI *LPREGESTERSERVICEPROC)(DWORD,DWORD);LPREGESTERSERVICEPROC lpRegesterServiceProc;
HINSTANCE hIns = LoadLibrary("kernel32");
if(hIns)
{
lpRegesterServiceProc = (LPREGESTERSERVICEPROC)GetProcAddress(hIns,"RegisterServiceProcess");//为什么这里不能正确得到RegiesterServiceProcess的地址而返回错误?
if(NULL == lpRegesterServiceProc)
AfxMessageBox("GetProcAddress Error!");
FreeLibrary(hIns);
}
为什么不能正确得到RegiesterServiceProcess的地址而返回错误?
但在得到其他地址,比如PSAPI的EnumProcesses时返回却是正确的,试了好几个,都可以,唯独kernel32.dll不可以,为什么会这样呢?
另外我在提升了进程的权限后结果也是一样,难道是KERNEL32不允许访问?又或是其它原因?
哪位兄台能替兄弟解答这个问题,已经困惑了好多天了。

解决方案 »

  1.   

    有没有 RegiesterServiceProcess 这个函数的呀?干什么用的?
    如果是一些没公开的API是不能用函数名得到函数地址的,要用导出序号。
      

  2.   

    kernel32.dll里没有RegiesterServiceProcess这个函数
      

  3.   

    RegisterServiceProcess 是 win9x 用的
      

  4.   

    楼上说的对,楼主大概是在NT下,试图找一个仅存于win9x下的函数.
      

  5.   

    agree, RegisterServiceProcess only exists under win9*, and it is not that simple under NT, seeCreating a Windows NT/Windows 2000 Service 
    http://codeguru.earthweb.com/system/Srv1.html
      

  6.   

    win2000的kernel32.dll中没有这个函数,楼主可以用VC自带的depends工具查看一下!
      

  7.   

    那么请问楼上,如何在XP或NT下隐藏进程不显示在任务列表中?即使ctrl+al+del的任务管理器也看不见,该怎么实现呢?
    还有,kerner32.dll中的GetModuleFileNameEx怎么也没有这个函数?偶在MSDN明明看见了有这个定义的啊,在kerner32.lib 里面定义的。为什么又不能GetPorcAddress呢?
      

  8.   

    在XP或NT下隐藏进程不显示在任务列表中?
    是比较难的问题了,可以用插入线程的方法,就是将一个线程寄生到一个已经存在的exe中,比如explorer.exe,lsass.exe等。在一些木马中有讲。