2010-11-22 12 views
0

私はOpenProcess関数を使用しています。コードはWindows XPでは完全に正常に動作しますが、7 X32ビットを獲得できません。OpenProcessが勝利に失敗する7

void SetDebugPrivileges() 
{ 
    void* tokenHandle; 

    TOKEN_PRIVILEGES privilegeToken; 
    LookupPrivilegeValue(0, SE_DEBUG_NAME, &privilegeToken.Privileges[0].Luid); 
    privilegeToken.PrivilegeCount = 1; 
    privilegeToken.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
    OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &tokenHandle); 
    AdjustTokenPrivileges(tokenHandle, 0, &privilegeToken, sizeof(TOKEN_PRIVILEGES), 0, 0); 
    CloseHandle(tokenHandle); 
} 

HANDLE _stdcall MyOpenProcess(DWORD dwAccess, BOOL bInherit, DWORD dwPID) 
{ 
    SetDebugPrivileges(); 

    HANDLE hRes = OpenProcess(dwAccess | PROCESS_SET_INFORMATION | PROCESS_VM_READ, bInherit, dwPID); 
} 

OpenProcessが勝利7上のエラーコード5で失敗したがXP上で正常に動作し、次のように

私のコードです。誰でもこの問題を助けることができれば素晴らしいだろう。

+0

あなたは管理権限でアプリケーションを実行していますか? – christian

+1

アクセスが拒否されました。 VM_READとデバッグアクセスの両方には非常に特権があります。 –

答えて

4

おそらくこれはUAC関連です。 OpenProcessTokenAdjustTokenPrivilegesは実際に成功していますか?

+0

はいOpenProcessTokenとAjustTokenPrivilegesの両方の関数は成功しています..私はまだアクセス拒否エラーを受け取ります – Neha

+0

私は特定のインストール可能なものを実行すると、MyOpenProcess関数のmsiexec mutiple時間のプロセスIDを取得することに気付きました。私は5回それを得る。 5回openProcessがmsiexec.exeを処理しています。 4回GetLastError()は成功を返し、5回目はアクセス拒否を返します。それが問題だろうか?私はopenProcessを複数回呼び出すと気にする必要がありますか? – Neha

+0

元の投稿に詳細を追加して、正確に何をしたいのか、そしていつ問題が発生するのかを説明できますか? 'MyOpenProcess()'などを呼び出すとき、これはMSIとmsiexec.exeとどのくらい正確に関係していますか? – Arnout

関連する問題