的区别是什么?CreateThread
的和 CreateRemoteThread
's lpParameter
来自 CreateThread
文件 和 CreateRemoteThread
文件 的 lpParameter
是 "要传递给线程函数的变量指针"。
关于 CreateRemoteThread
的 lpParameter
是一个指向void对象的指针,这是有意义的。它可能是内存中某个地方的某个地址。
HANDLE CreateRemoteThread(
HANDLE hProcess,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);
关于 CreateThread
的 lpParameter
是指向"__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
);
没有 功能性 这两个参数之间的区别。 它们只是任意的 void*
指针,没有什么特别之处。
__drv_aliasesMem
是一个 SAL注释. 它告知SAL感知的解析器,该参数引用了一个没有泄露的内存地址。
https:/docs.microsoft.comen-uscppcode-qualityc28197?view=vs-2019。
取指针并对其进行别名的函数(从而避免泄漏)应使用以下注释
__drv_aliasesMem
. 如果你创建了一个将对象插入到全局结构中的函数,或者将它传递给一个系统函数,那么你应该在其中添加__drv_aliasesMem
注解。
SAL注解对C或C++编译器没有影响,因为它们是作为空的预处理器宏来实现的。