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 );

参考技术A 如果你是用VS2008的话,可能是程序执行权限问题,可以试试这样:

//提升程序的权限
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;

这里的static并不是指返回一个static类型的量,而是对函数的作用域的限制,用static声明的函数,其作用域仅限于定义该函数的文件,也就是说,只能在该函数定义所在文件中才能调用它,在其它文件中是无法调用的。追问

那这种限制对于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的主要内容,如果未能解决你的问题,请参考以下文章

c++ strstr 返回值为啥static

c++中为啥要函数返回引用?

为啥在返回右值引用时给出 C++ 编译器警告?

无法用函数的返回值初始化对象。为啥? [复制]

当一个函数无返回值时,函数的类型应定义为啥

为啥 C 函数不能返回数组类型? [复制]