DWORD dwerr;
HANDLE hProcess = LookupProcessByName(("rundll32.exe"));
CString cstrcode;
dwerr = GetLastError();
cstrcode.Format("%ld",dwerr);
while ( hProcess )
{
TerminateProcess( hProcess,0 );
Sleep(100);
hProcess = LookupProcessByName(("rundll32.exe"));
CString cstrcode2;
cstrcode2.Format("%ld",dwerr);
cstrcode +=(","+cstrcode2);
}
如上代码,用VC调试时,无论debug还是release都是正确的,
但是直接运行生成的exe程序,第一次就失败,错误码为5。
请问原因与解决方法
HANDLE hProcess = LookupProcessByName(("rundll32.exe"));
CString cstrcode;
dwerr = GetLastError();
cstrcode.Format("%ld",dwerr);
while ( hProcess )
{
TerminateProcess( hProcess,0 );
Sleep(100);
hProcess = LookupProcessByName(("rundll32.exe"));
CString cstrcode2;
cstrcode2.Format("%ld",dwerr);
cstrcode +=(","+cstrcode2);
}
如上代码,用VC调试时,无论debug还是release都是正确的,
但是直接运行生成的exe程序,第一次就失败,错误码为5。
请问原因与解决方法
BOOL EnableDebugPrivilege()
{
HANDLE hToken;
BOOL fOk=FALSE;
if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken))
{
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount=1;
if(!LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tp.Privileges[0].Luid))
printf("Can't lookup privilege value.\n");
tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
if(!AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL))
printf("Can't adjust privilege value.\n");
fOk=(GetLastError()==ERROR_SUCCESS);
CloseHandle(hToken);
}
return fOk;
}