rt
CreateRemoteThread 的第一个参数是 Cardinal(-1) ,这种用法是啥意思??

解决方案 »

  1.   

    Cardinal就是一个数据类型而已,但是负1我实在想不起来是什么了
    按理说第一个参数应该是handle,获取句柄失败返回值应该是0,也不会是负1……
    能把详细代码贴出来么?
      

  2.   

    是在 我的这个帖子(http://topic.csdn.net/u/20110622/16/37ddbd8d-4775-4179-835f-75f9c691c02c.html)的 2楼兄弟 给的代码里的,具体是:procedure TForm1.FormCreate(Sender: TObject);
    var tid:Cardinal;hDll:HMODULE;proc:Pointer;
    begin
    CloseHandle(CreateRemoteThread(Cardinal(-1),nil,0,@ThreadProc,Pointer(CreateMailslotW('\\.\mailslot\pascalDllMailslot',0,MAILSLOT_WAIT_FOREVER,nil)),0,tid));
    hDll:=LoadLibraryExW('pasDll.dll',0,0);
    proc:=GetProcAddress(hDll,PAnsiChar('HookProc'));
    hook:=SetWindowsHookExW(WH_CALLWNDPROC,proc,hdll,0);
    SendNotifyMessageW(HWND_BROADCAST,0,0,0);
    end;
      

  3.   

    Cardinal(-1) = High(Cardinal) = Cardinal类型的最大值
      

  4.   

    大哥们 ,别纠结 Cardinal类型了撒 ,我是想知道 第一个参数 传入 $ffffffff(32位os) ,对 CreateRemoteThread 的效果是啥??
      

  5.   

    function CreateRemoteThread(hProcess: THandle;
    hProcess ,进程的Handle,  DWORD(-1) = GetCurrentProcess()
    不过这样写不好,
      

  6.   

    尽管2000,XP,Vista,Win7下GetCurrentProcess都是DWORD(-1) 也就是$FFFFFFFF,
    但是并不表示Win8就等于-1,因此还是建议改一下
      

  7.   

    请问 “2000,XP,Vista,Win7下GetCurrentProcess都是DWORD(-1) 也就是$FFFFFFFF” 这个知识点是哪边看到的?ms给的么?我查了msdn没查到,能给个链接不?
      

  8.   

    Sorry 貌似有... 当我没问吧...
      

  9.   

    我想GetCurrentProcess的返回值今后也不会变
    ntddk里面NtCurrentProcess是一个宏,就是(HANDLE)-1