CreateThread和CreateRemoteThread的lpParameter有什么区别?从CreateThread 文档和CreateRemoteThread 文档来看,lpParameter是“要传递给线程函数的变量的指针”。
对于CreateRemoteThread,lpParameter是指向空对象的指针,这是有意义的。可能是记忆中某个地方的某个地址。
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
);发布于 2020-04-24 16:56:54
这两个参数之间没有功能上的差别。它们只是任意的void*指针,没有什么特别之处。
__drv_aliasesMem是SAL注解。它通知感知SAL的解析器,该参数引用的内存地址没有泄漏:
https://learn.microsoft.com/en-us/cpp/code-quality/c28197?view=vs-2019
使用指针并将其化名(从而避免泄漏)的函数应该使用
__drv_aliasesMem进行注释。如果您创建一个函数将一个对象插入到全局结构中,或者将其传递给这样做的系统函数,那么您应该添加__drv_aliasesMem注释。
SAL注释不影响C或C++编译器,因为它们是作为空的预处理器宏实现的。
https://stackoverflow.com/questions/61405344
复制相似问题