Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//
// thread.cpp
//
#include "private.h"
#include "tlhelp32.h"
#include "osver.h"
#include "thdutil.h"
#include "vdmdbg.h"
#include "immxutil.h"
//+---------------------------------------------------------------------------
//
// Is16bit()
//
//----------------------------------------------------------------------------
typedef INT (*VDMENUMTASKWOW)(DWORD dwProcessId, TASKENUMPROC fp, LPARAM lParam); typedef struct tag_MYENUMWOW { DWORD dwThreadId; BOOL bRet; } MYENUMWOW;
BOOL TaskEnumProc(DWORD dwThreadId, WORD hMod16, WORD hTask16, LPARAM lParam ) { MYENUMWOW *pewow = (MYENUMWOW *)lParam;
if (pewow->dwThreadId == dwThreadId) { pewow->bRet = TRUE; return TRUE; } return FALSE; }
BOOL NTIs16bit(DWORD dwProcessId, DWORD dwThreadId) { static VDMENUMTASKWOW fpEnumTask = NULL;
MYENUMWOW ewow;
if (!fpEnumTask) { HINSTANCE hMod = LoadSystemLibrary("vdmdbg.dll"); fpEnumTask = (VDMENUMTASKWOW)GetProcAddress(hMod, "VDMEnumTaskWOW"); if (!fpEnumTask) return FALSE; } ewow.dwThreadId = dwThreadId; ewow.bRet = FALSE; fpEnumTask(dwProcessId, TaskEnumProc, (LPARAM)&ewow);
return ewow.bRet; }
BOOL Is16bitThread(DWORD dwProcessId, DWORD dwThreadId) { if (IsOnNT51()) { GUITHREADINFO guiti; guiti.cbSize = sizeof(GUITHREADINFO); if (GetGUIThreadInfo(dwThreadId, &guiti)) { return (guiti.flags & GUI_16BITTASK) ? TRUE : FALSE; } } else if (IsOnNT()) { return NTIs16bit(dwProcessId, dwThreadId); } else { // Win9xEnumProcess(Win9xEnumProcessProc, NULL);
// not implemented yet.
Assert(0); }
return FALSE; }
|