CreateThread和CreateRemoteThread的lpParameter有什么区别?

问题描述 投票:0回答:1

的区别是什么?CreateThread的和 CreateRemoteThread's lpParameter 来自 CreateThread 文件CreateRemoteThread 文件lpParameter 是 "要传递给线程函数的变量指针"。

关于 CreateRemoteThreadlpParameter 是一个指向void对象的指针,这是有意义的。它可能是内存中某个地方的某个地址。

HANDLE CreateRemoteThread(
      HANDLE                 hProcess,
      LPSECURITY_ATTRIBUTES  lpThreadAttributes,
      SIZE_T                 dwStackSize,
      LPTHREAD_START_ROUTINE lpStartAddress,
      LPVOID                 lpParameter,
      DWORD                  dwCreationFlags,
      LPDWORD                lpThreadId
 );

关于 CreateThreadlpParameter 是指向"__drv_aliasesMem "LPVOID对象的指针。为什么要加上"__drv_aliasesMem"?

HANDLE CreateThread(
      LPSECURITY_ATTRIBUTES   lpThreadAttributes,
      SIZE_T                  dwStackSize,
      LPTHREAD_START_ROUTINE  lpStartAddress,
      __drv_aliasesMem LPVOID lpParameter,
      DWORD                   dwCreationFlags,
      LPDWORD                 lpThreadId
);
c++ winapi
1个回答
1
投票

没有 功能性 这两个参数之间的区别。 它们只是任意的 void* 指针,没有什么特别之处。

__drv_aliasesMem 是一个 SAL注释. 它告知SAL感知的解析器,该参数引用了一个没有泄露的内存地址。

https:/docs.microsoft.comen-uscppcode-qualityc28197?view=vs-2019。

取指针并对其进行别名的函数(从而避免泄漏)应使用以下注释 __drv_aliasesMem. 如果你创建了一个将对象插入到全局结构中的函数,或者将它传递给一个系统函数,那么你应该在其中添加 __drv_aliasesMem 注解。

SAL注解对C或C++编译器没有影响,因为它们是作为空的预处理器宏来实现的。

参见 使用SAL注释来减少CC++代码的缺陷.

© www.soinside.com 2019 - 2024. All rights reserved.