QueueUserApc()を使用しますが、0を返し、GetLastError()は6を返します。無効なハンドルです。 handle - 関数QueueUserApc()の2番目のパラメータですが、OpenThread()によって返されました。QueueUserApc()が返されたハンドルが無効であると判断します
コードの一部:コール機能上記
void WINAPI My_IDtoHandle(IN PDWORD IDArray,
IN DWORD dwNumber,
OUT PHANDLE * Thread_Handle_Array)
{
PHANDLE handlearray;
DWORD count = 0;
handlearray = (PHANDLE)HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY,
dwNumber*sizeof(HANDLE));
for (; count < dwNumber; count++)
{
handlearray[count] = OpenThread(THREAD_ALL_ACCESS,
FALSE,
IDArray[count]);
if (handlearray[count] == NULL)
printf("Open the thread-%d is failed!\n\n", IDArray[count]);
}
*Thread_Handle_Array = handlearray;
return;
}
:
result = QueueUserAPC((PAPCFUNC)SetEvent,
Thread_Handle_Array[count],
(ULONG_PTR)(Target_Event_Handle_Array + count));
if (result == 0)
{
printf("The inserting of the %dth function-SetEvent is failed!\n\n", count + 1);
printf("The error code is %d\n\n", GetLastError());
}
そしてOpenThreadが返されたハンドルはストラングです:
あなた自身またはリモートプロセスのスレッドを開いていますか? – Ari0nhh
なぜ 'Number'と' dwNumber'が引数を分けるのですか?あなたは[mcve]を投稿できますか? 'QueueUserAPC'に渡されるハンドルが実際に' OpenThread'から返されたハンドルであることをデバッガでチェックしましたか? –
@ Ari0nhhリモートプロセス – nima