В чем разница между lpParameter для CreateThread и CreateRemoteThread? - PullRequest
0 голосов
/ 24 апреля 2020

В чем разница между 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 является указателем на объект LPVOID "__drv_aliasesMem". Почему это дополнение "__drv_aliasesMem"?

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

1 Ответ

1 голос
/ 24 апреля 2020

Не существует функциональной разницы между этими двумя параметрами. Это просто произвольные void* указатели, ничего особенного в них нет.

__drv_aliasesMem - это SAL-аннотация . Он сообщает анализатору с поддержкой SAL, что параметр ссылается на адрес памяти, который не просочился:

https://docs.microsoft.com/en-us/cpp/code-quality/c28197?view=vs-2019

Функции, которые принимают указатель и псевдоним это (таким образом избегая утечки) должно быть отмечено __drv_aliasesMem. Если вы создаете функцию, которая вставляет объект в глобальную структуру или передает ее системной функции, которая делает это, вы должны добавить аннотацию __drv_aliasesMem.

Аннотации SAL не влияют на C или компилятор C ++, поскольку они реализованы как пустые макросы препроцессора.

См. Использование аннотаций SAL для уменьшения дефектов кода C / C ++ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...