c++ OpenProcess() 函数返回值为啥返回NULL 急需解决!!! 邮箱372199852@qq.com
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ OpenProcess() 函数返回值为啥返回NULL 急需解决!!! 邮箱372199852@qq.com相关的知识,希望对你有一定的参考价值。
魔兽3 运行后,运行该段代码,hwnd 值不为 NULL,为什么 handle 值为 NULL?
c++ 代码如下:
HWND hwnd = FindWindow( NULL, L"Warcraft III");
DWORD wtp_id = 0;
if( hwnd != NULL )
HANDLE handle = OpenProcess( PROCESS_ALL_ACCESS, false, GetWindowThreadProcessId( hwnd, &wtp_id ) );
if( handle != NULL )
//可在这里添加读写内存的代码
CloseHandle( handle );
//提升程序的权限
BOOL EnablePrivilege(LPCSTR lpName, BOOL fEnable)
HANDLE hObject;
LUID Luid;
TOKEN_PRIVILEGES NewStatus;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hObject))
return FALSE;
if (LookupPrivilegeValue(NULL, lpName, &Luid))
NewStatus.Privileges[0].Luid = Luid;
NewStatus.PrivilegeCount = 1;
NewStatus.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;
AdjustTokenPrivileges(hObject, FALSE, &NewStatus, 0, 0, 0);
CloseHandle(hObject);
return TRUE;
return FALSE;
OnInitDialog()中调用:
EnablePrivilege(SE_DEBUG_NAME,TRUE); //提升程序的权限 参考技术B [MSDN]
If the function succeeds, the return value is an open handle to the specified process.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.
就是说如果函数执行成功的话返回的就是一个打开进程的句柄,如果失败了就是NULL,具体错误的原因你可以调用GetLastError查看
c++ strstr 返回值为啥static
tatic const char* _strstr(const char* s1, const char* s2)
assert(s2 && s1);
const char* p=s1, *r=s2;
while(*p!='\0')
while(*p++==*r++);
if(*r=='\0')
return p;
else
r=s2;
p=++s1;
return NULL;
那这种限制对于strstr这种通用api有什么价值呢?
追答能说一下这个函数的出处吗?是从那 个文件中看到的?这种情况见于从外部不是直接调用这个以下划线开头的函数,这个下划线开头的函数是供其它的函数调用的(假设这个函数是strstr()),而从外部是直接调用那个调用下划线开头的函数的函数(即strstr()函数)。
参考技术A static const char* _strstr(const char* s1, const char* s2)assert(s2 && s1);
const char* p=s1, *r=s2;
while(*p!='\0')
while(*p++==*r++);
if(*r=='\0')
return p;
else
r=s2;
p=++s1;
return NULL;
以上是关于c++ OpenProcess() 函数返回值为啥返回NULL 急需解决!!! 邮箱372199852@qq.com的主要内容,如果未能解决你的问题,请参考以下文章