[KERNEL32]

Merge r34770, r36475, r36990, r37019, r43852, r43952, r43954, r43979, r43981, r46868 from amd64 branch:
- Multiple ULONG / SIZE_T fixes
- Use UlongToHandle / HandleToUlong to convert between DWORD ProcessId and ClientId.UniqueProcess
- implement amd64 version of _dump_context
- Make IsConsoleHandle 64bit safe
- Update kernel32.pspec with a lot of Win7 (commented out) and some amd64 specific exports, add some more comments and fix sorting
- Implement amd64 version of BaseThreadStartupThunk and BaseProcessStartThunk
- Stub amd64 version of SwitchToFiber
- Implement amd64 version of BasepInitializeContext

svn path=/trunk/; revision=48119
This commit is contained in:
Timo Kreuzer 2010-07-19 18:52:18 +00:00
commit 24480b9b7d
15 changed files with 634 additions and 111 deletions

View file

@ -232,11 +232,11 @@ ProcessIdToHandle(IN DWORD dwProcessId)
CLIENT_ID ClientId; CLIENT_ID ClientId;
/* If we don't have a PID, look it up */ /* If we don't have a PID, look it up */
if (dwProcessId == MAXDWORD) dwProcessId = (DWORD)CsrGetProcessId(); if (dwProcessId == MAXDWORD) dwProcessId = (DWORD_PTR)CsrGetProcessId();
/* Open a handle to the process */ /* Open a handle to the process */
ClientId.UniqueThread = NULL; ClientId.UniqueThread = NULL;
ClientId.UniqueProcess = (HANDLE)dwProcessId; ClientId.UniqueProcess = UlongToHandle(dwProcessId);
InitializeObjectAttributes(&ObjectAttributes, NULL, 0, NULL, NULL); InitializeObjectAttributes(&ObjectAttributes, NULL, 0, NULL, NULL);
Status = NtOpenProcess(&Handle, Status = NtOpenProcess(&Handle,
PROCESS_ALL_ACCESS, PROCESS_ALL_ACCESS,

View file

@ -124,10 +124,11 @@ _module_name_from_addr(const void* addr, void **module_start_addr,
return psz; return psz;
} }
#ifdef _M_IX86
static VOID static VOID
_dump_context(PCONTEXT pc) _dump_context(PCONTEXT pc)
{ {
#ifdef _M_IX86
/* /*
* Print out the CPU registers * Print out the CPU registers
*/ */
@ -138,14 +139,19 @@ _dump_context(PCONTEXT pc)
DbgPrint("EDX: %.8x EBP: %.8x ESI: %.8x ESP: %.8x\n", pc->Edx, DbgPrint("EDX: %.8x EBP: %.8x ESI: %.8x ESP: %.8x\n", pc->Edx,
pc->Ebp, pc->Esi, pc->Esp); pc->Ebp, pc->Esi, pc->Esp);
DbgPrint("EDI: %.8x EFLAGS: %.8x\n", pc->Edi, pc->EFlags); DbgPrint("EDI: %.8x EFLAGS: %.8x\n", pc->Edi, pc->EFlags);
} #elif defined(_M_AMD64)
DbgPrint("CS:RIP %x:%I64x\n", pc->SegCs&0xffff, pc->Rip );
DbgPrint("DS %x ES %x FS %x GS %x\n", pc->SegDs&0xffff, pc->SegEs&0xffff,
pc->SegFs&0xffff, pc->SegGs&0xfff);
DbgPrint("RAX: %I64x RBX: %I64x RCX: %I64x RDI: %I64x\n", pc->Rax, pc->Rbx, pc->Rcx, pc->Rdi);
DbgPrint("RDX: %I64x RBP: %I64x RSI: %I64x RSP: %I64x\n", pc->Rdx, pc->Rbp, pc->Rsi, pc->Rsp);
DbgPrint("R8: %I64x R9: %I64x R10: %I64x R11: %I64x\n", pc->R8, pc->R9, pc->R10, pc->R11);
DbgPrint("R12: %I64x R13: %I64x R14: %I64x R15: %I64x\n", pc->R12, pc->R13, pc->R14, pc->R15);
DbgPrint("EFLAGS: %.8x\n", pc->EFlags);
#else #else
#warning Unknown architecture #warning Unknown architecture
static VOID
_dump_context(PCONTEXT pc)
{
}
#endif #endif
}
static LONG static LONG
BasepCheckForReadOnlyResource(IN PVOID Ptr) BasepCheckForReadOnlyResource(IN PVOID Ptr)
@ -275,7 +281,7 @@ UnhandledExceptionFilter(struct _EXCEPTION_POINTERS *ExceptionInfo)
LONG RetValue; LONG RetValue;
HANDLE DebugPort = NULL; HANDLE DebugPort = NULL;
NTSTATUS ErrCode; NTSTATUS ErrCode;
ULONG ErrorParameters[4]; ULONG_PTR ErrorParameters[4];
ULONG ErrorResponse; ULONG ErrorResponse;
PEXCEPTION_RECORD ExceptionRecord = ExceptionInfo->ExceptionRecord; PEXCEPTION_RECORD ExceptionRecord = ExceptionInfo->ExceptionRecord;
@ -326,7 +332,7 @@ UnhandledExceptionFilter(struct _EXCEPTION_POINTERS *ExceptionInfo)
/* Save exception code and address */ /* Save exception code and address */
ErrorParameters[0] = (ULONG)ExceptionRecord->ExceptionCode; ErrorParameters[0] = (ULONG)ExceptionRecord->ExceptionCode;
ErrorParameters[1] = (ULONG)ExceptionRecord->ExceptionAddress; ErrorParameters[1] = (ULONG_PTR)ExceptionRecord->ExceptionAddress;
if ((NTSTATUS)ExceptionRecord->ExceptionCode == STATUS_ACCESS_VIOLATION) if ((NTSTATUS)ExceptionRecord->ExceptionCode == STATUS_ACCESS_VIOLATION)
{ {

View file

@ -31,7 +31,7 @@
#endif #endif
#define IsConsoleHandle(h) \ #define IsConsoleHandle(h) \
(((((ULONG)h) & 0x10000003) == 0x3) ? TRUE : FALSE) (((((ULONG_PTR)h) & 0x10000003) == 0x3) ? TRUE : FALSE)
#define HANDLE_DETACHED_PROCESS (HANDLE)-2 #define HANDLE_DETACHED_PROCESS (HANDLE)-2
#define HANDLE_CREATE_NEW_CONSOLE (HANDLE)-3 #define HANDLE_CREATE_NEW_CONSOLE (HANDLE)-3
@ -110,8 +110,8 @@ BasepConvertObjectAttributes(OUT POBJECT_ATTRIBUTES ObjectAttributes,
NTSTATUS NTSTATUS
WINAPI WINAPI
BasepCreateStack(HANDLE hProcess, BasepCreateStack(HANDLE hProcess,
ULONG StackReserve, SIZE_T StackReserve,
ULONG StackCommit, SIZE_T StackCommit,
PINITIAL_TEB InitialTeb); PINITIAL_TEB InitialTeb);
VOID VOID

File diff suppressed because it is too large Load diff

View file

@ -130,6 +130,12 @@
<file>thread.S</file> <file>thread.S</file>
</directory> </directory>
</if> </if>
<if property="ARCH" value="amd64">
<directory name="amd64">
<file>fiber.S</file>
<file>thread.S</file>
</directory>
</if>
</directory> </directory>
<directory name="misc"> <directory name="misc">
<file>icustubs.cpp</file> <file>icustubs.cpp</file>

View file

@ -432,6 +432,7 @@ InterlockedDecrement(IN OUT LONG volatile *lpAddend)
return _InterlockedDecrement(lpAddend); return _InterlockedDecrement(lpAddend);
} }
#undef InterlockedExchange
LONG LONG
WINAPI WINAPI
InterlockedExchange(IN OUT LONG volatile *Target, InterlockedExchange(IN OUT LONG volatile *Target,

View file

@ -225,8 +225,8 @@ TH32CreateSnapshotSectionInitialize(DWORD dwFlags,
HANDLE hSection; HANDLE hSection;
PTH32SNAPSHOT Snapshot; PTH32SNAPSHOT Snapshot;
ULONG_PTR DataOffset; ULONG_PTR DataOffset;
ULONG ViewSize, i; SIZE_T ViewSize;
ULONG nProcesses = 0, nThreads = 0, nHeaps = 0, nModules = 0; ULONG i, nProcesses = 0, nThreads = 0, nHeaps = 0, nModules = 0;
ULONG RequiredSnapshotSize = sizeof(TH32SNAPSHOT); ULONG RequiredSnapshotSize = sizeof(TH32SNAPSHOT);
PRTL_PROCESS_HEAPS hi = NULL; PRTL_PROCESS_HEAPS hi = NULL;
PRTL_PROCESS_MODULES mi = NULL; PRTL_PROCESS_MODULES mi = NULL;
@ -670,7 +670,7 @@ Heap32ListFirst(HANDLE hSnapshot, LPHEAPLIST32 lphl)
{ {
PTH32SNAPSHOT Snapshot; PTH32SNAPSHOT Snapshot;
LARGE_INTEGER SOffset; LARGE_INTEGER SOffset;
ULONG ViewSize; SIZE_T ViewSize;
NTSTATUS Status; NTSTATUS Status;
CHECK_PARAM_SIZE(lphl, sizeof(HEAPLIST32)); CHECK_PARAM_SIZE(lphl, sizeof(HEAPLIST32));
@ -724,7 +724,7 @@ Heap32ListNext(HANDLE hSnapshot, LPHEAPLIST32 lphl)
{ {
PTH32SNAPSHOT Snapshot; PTH32SNAPSHOT Snapshot;
LARGE_INTEGER SOffset; LARGE_INTEGER SOffset;
ULONG ViewSize; SIZE_T ViewSize;
NTSTATUS Status; NTSTATUS Status;
CHECK_PARAM_SIZE(lphl, sizeof(HEAPLIST32)); CHECK_PARAM_SIZE(lphl, sizeof(HEAPLIST32));
@ -811,7 +811,7 @@ Module32FirstW(HANDLE hSnapshot, LPMODULEENTRY32W lpme)
{ {
PTH32SNAPSHOT Snapshot; PTH32SNAPSHOT Snapshot;
LARGE_INTEGER SOffset; LARGE_INTEGER SOffset;
ULONG ViewSize; SIZE_T ViewSize;
NTSTATUS Status; NTSTATUS Status;
CHECK_PARAM_SIZE(lpme, sizeof(MODULEENTRY32W)); CHECK_PARAM_SIZE(lpme, sizeof(MODULEENTRY32W));
@ -898,7 +898,7 @@ Module32NextW(HANDLE hSnapshot, LPMODULEENTRY32W lpme)
{ {
PTH32SNAPSHOT Snapshot; PTH32SNAPSHOT Snapshot;
LARGE_INTEGER SOffset; LARGE_INTEGER SOffset;
ULONG ViewSize; SIZE_T ViewSize;
NTSTATUS Status; NTSTATUS Status;
CHECK_PARAM_SIZE(lpme, sizeof(MODULEENTRY32W)); CHECK_PARAM_SIZE(lpme, sizeof(MODULEENTRY32W));
@ -985,7 +985,7 @@ Process32FirstW(HANDLE hSnapshot, LPPROCESSENTRY32W lppe)
{ {
PTH32SNAPSHOT Snapshot; PTH32SNAPSHOT Snapshot;
LARGE_INTEGER SOffset; LARGE_INTEGER SOffset;
ULONG ViewSize; SIZE_T ViewSize;
NTSTATUS Status; NTSTATUS Status;
CHECK_PARAM_SIZE(lppe, sizeof(PROCESSENTRY32W)); CHECK_PARAM_SIZE(lppe, sizeof(PROCESSENTRY32W));
@ -1074,7 +1074,7 @@ Process32NextW(HANDLE hSnapshot, LPPROCESSENTRY32W lppe)
{ {
PTH32SNAPSHOT Snapshot; PTH32SNAPSHOT Snapshot;
LARGE_INTEGER SOffset; LARGE_INTEGER SOffset;
ULONG ViewSize; SIZE_T ViewSize;
NTSTATUS Status; NTSTATUS Status;
CHECK_PARAM_SIZE(lppe, sizeof(PROCESSENTRY32W)); CHECK_PARAM_SIZE(lppe, sizeof(PROCESSENTRY32W));
@ -1128,7 +1128,7 @@ Thread32First(HANDLE hSnapshot, LPTHREADENTRY32 lpte)
{ {
PTH32SNAPSHOT Snapshot; PTH32SNAPSHOT Snapshot;
LARGE_INTEGER SOffset; LARGE_INTEGER SOffset;
ULONG ViewSize; SIZE_T ViewSize;
NTSTATUS Status; NTSTATUS Status;
CHECK_PARAM_SIZE(lpte, sizeof(THREADENTRY32)); CHECK_PARAM_SIZE(lpte, sizeof(THREADENTRY32));
@ -1182,7 +1182,7 @@ Thread32Next(HANDLE hSnapshot, LPTHREADENTRY32 lpte)
{ {
PTH32SNAPSHOT Snapshot; PTH32SNAPSHOT Snapshot;
LARGE_INTEGER SOffset; LARGE_INTEGER SOffset;
ULONG ViewSize; SIZE_T ViewSize;
NTSTATUS Status; NTSTATUS Status;
CHECK_PARAM_SIZE(lpte, sizeof(THREADENTRY32)); CHECK_PARAM_SIZE(lpte, sizeof(THREADENTRY32));
@ -1233,7 +1233,7 @@ Thread32Next(HANDLE hSnapshot, LPTHREADENTRY32 lpte)
BOOL BOOL
WINAPI WINAPI
Toolhelp32ReadProcessMemory(DWORD th32ProcessID, LPCVOID lpBaseAddress, Toolhelp32ReadProcessMemory(DWORD th32ProcessID, LPCVOID lpBaseAddress,
LPVOID lpBuffer, DWORD cbRead, LPDWORD lpNumberOfBytesRead) LPVOID lpBuffer, SIZE_T cbRead, SIZE_T* lpNumberOfBytesRead)
{ {
HANDLE hProcess = OpenProcess(PROCESS_VM_READ, FALSE, th32ProcessID); HANDLE hProcess = OpenProcess(PROCESS_VM_READ, FALSE, th32ProcessID);
if(hProcess != NULL) if(hProcess != NULL)

View file

@ -11,6 +11,8 @@
#include <k32.h> #include <k32.h>
#ifdef _M_IX86 #ifdef _M_IX86
#include "i386/ketypes.h" #include "i386/ketypes.h"
#elif defined _M_AMD64
#include "amd64/ketypes.h"
#endif #endif
#define NDEBUG #define NDEBUG
@ -189,8 +191,8 @@ BasepConvertObjectAttributes(OUT POBJECT_ATTRIBUTES ObjectAttributes,
NTSTATUS NTSTATUS
WINAPI WINAPI
BasepCreateStack(HANDLE hProcess, BasepCreateStack(HANDLE hProcess,
ULONG StackReserve, SIZE_T StackReserve,
ULONG StackCommit, SIZE_T StackCommit,
PINITIAL_TEB InitialTeb) PINITIAL_TEB InitialTeb)
{ {
NTSTATUS Status; NTSTATUS Status;
@ -290,7 +292,7 @@ BasepCreateStack(HANDLE hProcess,
/* Create a guard page */ /* Create a guard page */
if (UseGuard) if (UseGuard)
{ {
ULONG GuardPageSize = SystemBasicInfo.PageSize; SIZE_T GuardPageSize = SystemBasicInfo.PageSize;
ULONG Dummy; ULONG Dummy;
/* Attempt maximum space possible */ /* Attempt maximum space possible */
@ -318,7 +320,7 @@ WINAPI
BasepFreeStack(HANDLE hProcess, BasepFreeStack(HANDLE hProcess,
PINITIAL_TEB InitialTeb) PINITIAL_TEB InitialTeb)
{ {
ULONG Dummy = 0; SIZE_T Dummy = 0;
/* Free the Stack */ /* Free the Stack */
NtFreeVirtualMemory(hProcess, NtFreeVirtualMemory(hProcess,
@ -376,6 +378,44 @@ BasepInitializeContext(IN PCONTEXT Context,
/* Give it some room for the Parameter */ /* Give it some room for the Parameter */
Context->Esp -= sizeof(PVOID); Context->Esp -= sizeof(PVOID);
#elif defined(_M_AMD64)
DPRINT("BasepInitializeContext: %p\n", Context);
/* Setup the Initial Win32 Thread Context */
Context->Rax = (ULONG_PTR)StartAddress;
Context->Rbx = (ULONG_PTR)Parameter;
Context->Rsp = (ULONG_PTR)StackAddress;
/* The other registers are undefined */
/* Setup the Segments */
Context->SegGs = KGDT64_R3_DATA | RPL_MASK;
Context->SegEs = KGDT64_R3_DATA | RPL_MASK;
Context->SegDs = KGDT64_R3_DATA | RPL_MASK;
Context->SegCs = KGDT64_R3_CODE | RPL_MASK;
Context->SegSs = KGDT64_R3_DATA | RPL_MASK;
Context->SegFs = KGDT64_R3_CMTEB | RPL_MASK;
/* Set the EFLAGS */
Context->EFlags = 0x3000; /* IOPL 3 */
if (ContextType == 1) /* For Threads */
{
Context->Rip = (ULONG_PTR)BaseThreadStartupThunk;
}
else if (ContextType == 2) /* For Fibers */
{
Context->Rip = (ULONG_PTR)BaseFiberStartup;
}
else /* For first thread in a Process */
{
Context->Rip = (ULONG_PTR)BaseProcessStartThunk;
}
/* Set the Context Flags */
Context->ContextFlags = CONTEXT_FULL;
/* Give it some room for the Parameter */
Context->Rsp -= sizeof(PVOID);
#else #else
#warning Unknown architecture #warning Unknown architecture
UNIMPLEMENTED; UNIMPLEMENTED;

View file

@ -36,8 +36,8 @@ RegisterWaitForInputIdle(WaitForInputIdleType lpfnRegisterWaitForInputIdle);
BOOL BOOL
WINAPI WINAPI
GetProcessAffinityMask(HANDLE hProcess, GetProcessAffinityMask(HANDLE hProcess,
LPDWORD lpProcessAffinityMask, PDWORD_PTR lpProcessAffinityMask,
LPDWORD lpSystemAffinityMask) PDWORD_PTR lpSystemAffinityMask)
{ {
PROCESS_BASIC_INFORMATION ProcessInfo; PROCESS_BASIC_INFORMATION ProcessInfo;
SYSTEM_BASIC_INFORMATION SystemInfo; SYSTEM_BASIC_INFORMATION SystemInfo;
@ -77,7 +77,7 @@ GetProcessAffinityMask(HANDLE hProcess,
BOOL BOOL
WINAPI WINAPI
SetProcessAffinityMask(HANDLE hProcess, SetProcessAffinityMask(HANDLE hProcess,
DWORD dwProcessAffinityMask) DWORD_PTR dwProcessAffinityMask)
{ {
NTSTATUS Status; NTSTATUS Status;
@ -284,7 +284,7 @@ DWORD
WINAPI WINAPI
GetCurrentProcessId(VOID) GetCurrentProcessId(VOID)
{ {
return (DWORD)GetTeb()->ClientId.UniqueProcess; return HandleToUlong(GetTeb()->ClientId.UniqueProcess);
} }
@ -355,7 +355,7 @@ OpenProcess(DWORD dwDesiredAccess,
OBJECT_ATTRIBUTES ObjectAttributes; OBJECT_ATTRIBUTES ObjectAttributes;
CLIENT_ID ClientId; CLIENT_ID ClientId;
ClientId.UniqueProcess = (HANDLE)dwProcessId; ClientId.UniqueProcess = UlongToHandle(dwProcessId);
ClientId.UniqueThread = 0; ClientId.UniqueThread = 0;
InitializeObjectAttributes(&ObjectAttributes, InitializeObjectAttributes(&ObjectAttributes,
@ -559,7 +559,7 @@ BOOL
WINAPI WINAPI
FlushInstructionCache(HANDLE hProcess, FlushInstructionCache(HANDLE hProcess,
LPCVOID lpBaseAddress, LPCVOID lpBaseAddress,
DWORD dwSize) SIZE_T dwSize)
{ {
NTSTATUS Status; NTSTATUS Status;

View file

@ -325,7 +325,7 @@ BasepDuplicateAndWriteHandle(IN HANDLE ProcessHandle,
{ {
NTSTATUS Status; NTSTATUS Status;
HANDLE DuplicatedHandle; HANDLE DuplicatedHandle;
ULONG Dummy; SIZE_T Dummy;
DPRINT("BasepDuplicateAndWriteHandle. hProcess: %lx, Handle: %lx," DPRINT("BasepDuplicateAndWriteHandle. hProcess: %lx, Handle: %lx,"
"Address: %p\n", ProcessHandle, StandardHandle, Address); "Address: %p\n", ProcessHandle, StandardHandle, Address);

View file

@ -73,7 +73,7 @@ ProcessIdToSessionId(IN DWORD dwProcessId,
return FALSE; return FALSE;
} }
ClientId.UniqueProcess = (HANDLE)dwProcessId; ClientId.UniqueProcess = UlongToHandle(dwProcessId);
ClientId.UniqueThread = 0; ClientId.UniqueThread = 0;
InitializeObjectAttributes(&ObjectAttributes, NULL, 0, NULL, NULL); InitializeObjectAttributes(&ObjectAttributes, NULL, 0, NULL, NULL);

View file

@ -0,0 +1,17 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries
* FILE: lib/kernel32/thread/i386/fiber.S
* PURPOSE: Fiber context switch code for the x86 architecture
* PROGRAMMERS: Alex Ionescu (alex@relsoft.net)
* KJK::Hyperion <noog@libero.it>
*/
#include <ndk/asm.h>
.globl SwitchToFiber
.intel_syntax noprefix
SwitchToFiber:
/* FIXME: TODO */
ret 4

View file

@ -0,0 +1,32 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries
* FILE: lib/kernel32/thread/i386/thread.S
* PURPOSE: Thread Start Thunks
* PROGRAMMER: Alex Ionescu (alex@relsoft.net)
*/
.globl BaseThreadStartupThunk
.globl BaseProcessStartThunk
.intel_syntax noprefix
BaseThreadStartupThunk:
/* Start out fresh */
xor rbp, rbp
push rbx /* lpParameter */
push rax /* lpStartAddress */
push 0 /* Return RIP */
jmp BaseThreadStartup
BaseProcessStartThunk:
/* Start out fresh */
xor rbp, rbp
push rax /* lpStartAddress */
push 0 /* Return RIP */
jmp BaseProcessStartup
/* EOF */

View file

@ -258,6 +258,13 @@ BaseFiberStartup(VOID)
DPRINT("Starting Fiber\n"); DPRINT("Starting Fiber\n");
BaseThreadStartup((LPTHREAD_START_ROUTINE)Fiber->Context.Eax, BaseThreadStartup((LPTHREAD_START_ROUTINE)Fiber->Context.Eax,
(LPVOID)Fiber->Context.Ebx); (LPVOID)Fiber->Context.Ebx);
#elif defined(_M_AMD64)
PFIBER Fiber = GetFiberData();
/* Call the Thread Startup Routine */
DPRINT1("Starting Fiber\n");
BaseThreadStartup((LPTHREAD_START_ROUTINE)Fiber->Context.Rax,
(LPVOID)Fiber->Context.Rbx);
#else #else
#warning Unknown architecture #warning Unknown architecture
UNIMPLEMENTED; UNIMPLEMENTED;

View file

@ -232,7 +232,7 @@ CreateRemoteThread(HANDLE hProcess,
} }
/* Success */ /* Success */
if(lpThreadId) *lpThreadId = (DWORD)ClientId.UniqueThread; if(lpThreadId) *lpThreadId = HandleToUlong(ClientId.UniqueThread);
/* Resume it if asked */ /* Resume it if asked */
if (!(dwCreationFlags & CREATE_SUSPENDED)) if (!(dwCreationFlags & CREATE_SUSPENDED))
@ -344,7 +344,7 @@ DWORD
WINAPI WINAPI
GetCurrentThreadId(VOID) GetCurrentThreadId(VOID)
{ {
return (DWORD)(NtCurrentTeb()->ClientId).UniqueThread; return HandleToUlong(NtCurrentTeb()->ClientId.UniqueThread);
} }
/* /*
@ -684,6 +684,7 @@ GetThreadSelectorEntry(IN HANDLE hThread,
IN DWORD dwSelector, IN DWORD dwSelector,
OUT LPLDT_ENTRY lpSelectorEntry) OUT LPLDT_ENTRY lpSelectorEntry)
{ {
#ifdef _M_IX86
DESCRIPTOR_TABLE_ENTRY DescriptionTableEntry; DESCRIPTOR_TABLE_ENTRY DescriptionTableEntry;
NTSTATUS Status; NTSTATUS Status;
@ -704,6 +705,10 @@ GetThreadSelectorEntry(IN HANDLE hThread,
/* Success, return the selector */ /* Success, return the selector */
*lpSelectorEntry = DescriptionTableEntry.Descriptor; *lpSelectorEntry = DescriptionTableEntry.Descriptor;
return TRUE; return TRUE;
#else
DPRINT1("Calling GetThreadSelectorEntry!\n");
return FALSE;
#endif
} }
/* /*
@ -749,7 +754,7 @@ GetProcessIdOfThread(HANDLE Thread)
return 0; return 0;
} }
return (DWORD)ThreadBasic.ClientId.UniqueProcess; return HandleToUlong(ThreadBasic.ClientId.UniqueProcess);
} }
/* /*
@ -772,7 +777,7 @@ GetThreadId(HANDLE Thread)
return 0; return 0;
} }
return (DWORD)ThreadBasic.ClientId.UniqueThread; return HandleToUlong(ThreadBasic.ClientId.UniqueThread);
} }
/* /*