|
|
|
[公告]论坛己转到新空间来了
~_~ |
|
关于DebugActiveProcess函数不能成功执行的问题!!!
用DuplicateHandle可以将 进程/线程伪句柄 转化为 进程/线程实句柄 |
|
关于DebugActiveProcess函数不能成功执行的问题!!!
测试了一下: 你的程序有这么一句 OpenProcessToken(hProcess,TOKEN_ALL_ACCESS,&hToken) 应该改为OpenProcessToken(GetCurrentProcess(),..... 要调整权限的是当前进程,而不是目标进程 这样就OK 了 |
|
|
|
关于DebugActiveProcess函数不能成功执行的问题!!!
AdjustTokenPrivileges(hToken,FALSE,&TokenPrivileges,0,NULL,NULL) 注意下第四个参数:sizeof(TOKEN_PRIVILEGES); 你测试一下,是不是这里的问题? |
|
关于DebugActiveProcess函数不能成功执行的问题!!!
转文一篇:HOWTO: How to Obtain a Handle to Any Process with SeDebugPrivilege 来源: VS.NET MSDN #define RTN_OK 0 #define RTN_USAGE 1 #define RTN_ERROR 13 #include <windows.h> #include <stdio.h> BOOL SetPrivilege( HANDLE hToken, // token handle LPCTSTR Privilege, // Privilege to enable/disable BOOL bEnablePrivilege // TRUE to enable. FALSE to disable ); void DisplayError(LPTSTR szAPI); int main(int argc, char *argv[]) { HANDLE hProcess; HANDLE hToken; int dwRetVal=RTN_OK; // assume success from main() // show correct usage for kill if (argc != 2) { fprintf(stderr,"Usage: %s [ProcessId]\n", argv[0]); return RTN_USAGE; } if(!OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken )) return RTN_ERROR; // enable SeDebugPrivilege if(!SetPrivilege(hToken, SE_DEBUG_NAME, TRUE)) { DisplayError("SetPrivilege"); // close token handle CloseHandle(hToken); // indicate failure return RTN_ERROR; } // open the process if((hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, atoi(argv[1]) // PID from commandline )) == NULL) { DisplayError("OpenProcess"); return RTN_ERROR; } // disable SeDebugPrivilege SetPrivilege(hToken, SE_DEBUG_NAME, FALSE); if(!TerminateProcess(hProcess, 0xffffffff)) { DisplayError("TerminateProcess"); dwRetVal=RTN_ERROR; } // close handles CloseHandle(hToken); CloseHandle(hProcess); return dwRetVal; } BOOL SetPrivilege( HANDLE hToken, // token handle LPCTSTR Privilege, // Privilege to enable/disable BOOL bEnablePrivilege // TRUE to enable. FALSE to disable ) { TOKEN_PRIVILEGES tp; LUID luid; TOKEN_PRIVILEGES tpPrevious; DWORD cbPrevious=sizeof(TOKEN_PRIVILEGES); if(!LookupPrivilegeValue( NULL, Privilege, &luid )) return FALSE; // // first pass. get current privilege setting // tp.PrivilegeCount = 1; tp.Privileges[0].Luid = luid; tp.Privileges[0].Attributes = 0; AdjustTokenPrivileges( hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), &tpPrevious, &cbPrevious ); if (GetLastError() != ERROR_SUCCESS) return FALSE; // // second pass. set privilege based on previous setting // tpPrevious.PrivilegeCount = 1; tpPrevious.Privileges[0].Luid = luid; if(bEnablePrivilege) { tpPrevious.Privileges[0].Attributes |= (SE_PRIVILEGE_ENABLED); } else { tpPrevious.Privileges[0].Attributes ^= (SE_PRIVILEGE_ENABLED & tpPrevious.Privileges[0].Attributes); } AdjustTokenPrivileges( hToken, FALSE, &tpPrevious, cbPrevious, NULL, NULL ); if (GetLastError() != ERROR_SUCCESS) return FALSE; return TRUE; } void DisplayError( LPTSTR szAPI // pointer to failed API name ) { LPTSTR MessageBuffer; DWORD dwBufferLength; fprintf(stderr,"%s() error!\n", szAPI); if(dwBufferLength=FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), GetSystemDefaultLangID(), (LPTSTR) &MessageBuffer, 0, NULL )) { DWORD dwBytesWritten; // // Output message string on stderr // WriteFile( GetStdHandle(STD_ERROR_HANDLE), MessageBuffer, dwBufferLength, &dwBytesWritten, NULL ); // // free the buffer allocated by the system // LocalFree(MessageBuffer); } } |
|
|
|
关于DebugActiveProcess函数不能成功执行的问题!!!
------------------------------------------------------ 引用MSDN: However, on Windows NT, DebugActiveProcess can fail if the target process was created with a security descriptor that grants the debugger anything less than full access. Note that if the debugging process has the SE_DEBUG_NAME privilege granted and enabled, it can debug any process. ―――――――――――――――――――――――――---- 提升调试进程SE_DEBUG_NAME权限即可 |
|
|
|
|
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值