markrussinovich/TaskManagerBitmap

Close thread handle returned from CreateRemoteThreadEx

JohnLaTwC opened this issue · 1 comments

These handles will be closed anyway at process exit, but...

CreateRemoteThreadEx( GetCurrentProcess(), 0, 0, PixelCpuThread, (PVOID)(DWORD_PTR) cpuNumber,

+        HANDLE hThread = NULL;
...
        for( cpu = 0; cpu < sizeof( numaRelationship->GroupMask.Mask ) * 8; cpu++ ) {

            if( (1ULL << cpu) & numaRelationship->GroupMask.Mask ) {

                InitializeProcThreadAttributeList( NULL, 1, 0, &attrListSize );
                attrList = (LPPROC_THREAD_ATTRIBUTE_LIST)malloc( attrListSize );
                InitializeProcThreadAttributeList( attrList, 1, 0, &attrListSize );
                memset( &groupAffinity, 0, sizeof( groupAffinity ) );
                groupAffinity.Group = numaRelationship->GroupMask.Group;
                groupAffinity.Mask = (KAFFINITY)1 << cpu;
                UpdateProcThreadAttribute( attrList, 0, PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY,
                    &groupAffinity, sizeof( groupAffinity ), NULL, NULL );

-                CreateRemoteThreadEx( GetCurrentProcess(), 0, 0, PixelCpuThread, (PVOID)(DWORD_PTR) cpuNumber,
+                hThread = CreateRemoteThreadEx( GetCurrentProcess(), 0, 0, PixelCpuThread, (PVOID)(DWORD_PTR) cpuNumber,
                    0, attrList, NULL );
+                if (hThread)
+                {
+                    CloseHandle (hThread);
+                    hThread = NULL;
+                }
                DeleteProcThreadAttributeList( attrList );
                free( attrList );
                cpuNumber++;

Closing issue:

#2