mirror of
https://github.com/reactos/reactos.git
synced 2025-02-23 17:05:46 +00:00
[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:
commit
24480b9b7d
15 changed files with 634 additions and 111 deletions
|
@ -232,11 +232,11 @@ ProcessIdToHandle(IN DWORD dwProcessId)
|
|||
CLIENT_ID ClientId;
|
||||
|
||||
/* 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 */
|
||||
ClientId.UniqueThread = NULL;
|
||||
ClientId.UniqueProcess = (HANDLE)dwProcessId;
|
||||
ClientId.UniqueProcess = UlongToHandle(dwProcessId);
|
||||
InitializeObjectAttributes(&ObjectAttributes, NULL, 0, NULL, NULL);
|
||||
Status = NtOpenProcess(&Handle,
|
||||
PROCESS_ALL_ACCESS,
|
||||
|
|
|
@ -124,10 +124,11 @@ _module_name_from_addr(const void* addr, void **module_start_addr,
|
|||
return psz;
|
||||
}
|
||||
|
||||
#ifdef _M_IX86
|
||||
|
||||
static VOID
|
||||
_dump_context(PCONTEXT pc)
|
||||
{
|
||||
#ifdef _M_IX86
|
||||
/*
|
||||
* 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,
|
||||
pc->Ebp, pc->Esi, pc->Esp);
|
||||
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
|
||||
#warning Unknown architecture
|
||||
static VOID
|
||||
_dump_context(PCONTEXT pc)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static LONG
|
||||
BasepCheckForReadOnlyResource(IN PVOID Ptr)
|
||||
|
@ -275,7 +281,7 @@ UnhandledExceptionFilter(struct _EXCEPTION_POINTERS *ExceptionInfo)
|
|||
LONG RetValue;
|
||||
HANDLE DebugPort = NULL;
|
||||
NTSTATUS ErrCode;
|
||||
ULONG ErrorParameters[4];
|
||||
ULONG_PTR ErrorParameters[4];
|
||||
ULONG ErrorResponse;
|
||||
PEXCEPTION_RECORD ExceptionRecord = ExceptionInfo->ExceptionRecord;
|
||||
|
||||
|
@ -326,7 +332,7 @@ UnhandledExceptionFilter(struct _EXCEPTION_POINTERS *ExceptionInfo)
|
|||
|
||||
/* Save exception code and address */
|
||||
ErrorParameters[0] = (ULONG)ExceptionRecord->ExceptionCode;
|
||||
ErrorParameters[1] = (ULONG)ExceptionRecord->ExceptionAddress;
|
||||
ErrorParameters[1] = (ULONG_PTR)ExceptionRecord->ExceptionAddress;
|
||||
|
||||
if ((NTSTATUS)ExceptionRecord->ExceptionCode == STATUS_ACCESS_VIOLATION)
|
||||
{
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#endif
|
||||
|
||||
#define IsConsoleHandle(h) \
|
||||
(((((ULONG)h) & 0x10000003) == 0x3) ? TRUE : FALSE)
|
||||
(((((ULONG_PTR)h) & 0x10000003) == 0x3) ? TRUE : FALSE)
|
||||
|
||||
#define HANDLE_DETACHED_PROCESS (HANDLE)-2
|
||||
#define HANDLE_CREATE_NEW_CONSOLE (HANDLE)-3
|
||||
|
@ -110,8 +110,8 @@ BasepConvertObjectAttributes(OUT POBJECT_ATTRIBUTES ObjectAttributes,
|
|||
NTSTATUS
|
||||
WINAPI
|
||||
BasepCreateStack(HANDLE hProcess,
|
||||
ULONG StackReserve,
|
||||
ULONG StackCommit,
|
||||
SIZE_T StackReserve,
|
||||
SIZE_T StackCommit,
|
||||
PINITIAL_TEB InitialTeb);
|
||||
|
||||
VOID
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -130,6 +130,12 @@
|
|||
<file>thread.S</file>
|
||||
</directory>
|
||||
</if>
|
||||
<if property="ARCH" value="amd64">
|
||||
<directory name="amd64">
|
||||
<file>fiber.S</file>
|
||||
<file>thread.S</file>
|
||||
</directory>
|
||||
</if>
|
||||
</directory>
|
||||
<directory name="misc">
|
||||
<file>icustubs.cpp</file>
|
||||
|
|
|
@ -432,6 +432,7 @@ InterlockedDecrement(IN OUT LONG volatile *lpAddend)
|
|||
return _InterlockedDecrement(lpAddend);
|
||||
}
|
||||
|
||||
#undef InterlockedExchange
|
||||
LONG
|
||||
WINAPI
|
||||
InterlockedExchange(IN OUT LONG volatile *Target,
|
||||
|
|
|
@ -225,8 +225,8 @@ TH32CreateSnapshotSectionInitialize(DWORD dwFlags,
|
|||
HANDLE hSection;
|
||||
PTH32SNAPSHOT Snapshot;
|
||||
ULONG_PTR DataOffset;
|
||||
ULONG ViewSize, i;
|
||||
ULONG nProcesses = 0, nThreads = 0, nHeaps = 0, nModules = 0;
|
||||
SIZE_T ViewSize;
|
||||
ULONG i, nProcesses = 0, nThreads = 0, nHeaps = 0, nModules = 0;
|
||||
ULONG RequiredSnapshotSize = sizeof(TH32SNAPSHOT);
|
||||
PRTL_PROCESS_HEAPS hi = NULL;
|
||||
PRTL_PROCESS_MODULES mi = NULL;
|
||||
|
@ -670,7 +670,7 @@ Heap32ListFirst(HANDLE hSnapshot, LPHEAPLIST32 lphl)
|
|||
{
|
||||
PTH32SNAPSHOT Snapshot;
|
||||
LARGE_INTEGER SOffset;
|
||||
ULONG ViewSize;
|
||||
SIZE_T ViewSize;
|
||||
NTSTATUS Status;
|
||||
|
||||
CHECK_PARAM_SIZE(lphl, sizeof(HEAPLIST32));
|
||||
|
@ -724,7 +724,7 @@ Heap32ListNext(HANDLE hSnapshot, LPHEAPLIST32 lphl)
|
|||
{
|
||||
PTH32SNAPSHOT Snapshot;
|
||||
LARGE_INTEGER SOffset;
|
||||
ULONG ViewSize;
|
||||
SIZE_T ViewSize;
|
||||
NTSTATUS Status;
|
||||
|
||||
CHECK_PARAM_SIZE(lphl, sizeof(HEAPLIST32));
|
||||
|
@ -811,7 +811,7 @@ Module32FirstW(HANDLE hSnapshot, LPMODULEENTRY32W lpme)
|
|||
{
|
||||
PTH32SNAPSHOT Snapshot;
|
||||
LARGE_INTEGER SOffset;
|
||||
ULONG ViewSize;
|
||||
SIZE_T ViewSize;
|
||||
NTSTATUS Status;
|
||||
|
||||
CHECK_PARAM_SIZE(lpme, sizeof(MODULEENTRY32W));
|
||||
|
@ -898,7 +898,7 @@ Module32NextW(HANDLE hSnapshot, LPMODULEENTRY32W lpme)
|
|||
{
|
||||
PTH32SNAPSHOT Snapshot;
|
||||
LARGE_INTEGER SOffset;
|
||||
ULONG ViewSize;
|
||||
SIZE_T ViewSize;
|
||||
NTSTATUS Status;
|
||||
|
||||
CHECK_PARAM_SIZE(lpme, sizeof(MODULEENTRY32W));
|
||||
|
@ -985,7 +985,7 @@ Process32FirstW(HANDLE hSnapshot, LPPROCESSENTRY32W lppe)
|
|||
{
|
||||
PTH32SNAPSHOT Snapshot;
|
||||
LARGE_INTEGER SOffset;
|
||||
ULONG ViewSize;
|
||||
SIZE_T ViewSize;
|
||||
NTSTATUS Status;
|
||||
|
||||
CHECK_PARAM_SIZE(lppe, sizeof(PROCESSENTRY32W));
|
||||
|
@ -1074,7 +1074,7 @@ Process32NextW(HANDLE hSnapshot, LPPROCESSENTRY32W lppe)
|
|||
{
|
||||
PTH32SNAPSHOT Snapshot;
|
||||
LARGE_INTEGER SOffset;
|
||||
ULONG ViewSize;
|
||||
SIZE_T ViewSize;
|
||||
NTSTATUS Status;
|
||||
|
||||
CHECK_PARAM_SIZE(lppe, sizeof(PROCESSENTRY32W));
|
||||
|
@ -1128,7 +1128,7 @@ Thread32First(HANDLE hSnapshot, LPTHREADENTRY32 lpte)
|
|||
{
|
||||
PTH32SNAPSHOT Snapshot;
|
||||
LARGE_INTEGER SOffset;
|
||||
ULONG ViewSize;
|
||||
SIZE_T ViewSize;
|
||||
NTSTATUS Status;
|
||||
|
||||
CHECK_PARAM_SIZE(lpte, sizeof(THREADENTRY32));
|
||||
|
@ -1182,7 +1182,7 @@ Thread32Next(HANDLE hSnapshot, LPTHREADENTRY32 lpte)
|
|||
{
|
||||
PTH32SNAPSHOT Snapshot;
|
||||
LARGE_INTEGER SOffset;
|
||||
ULONG ViewSize;
|
||||
SIZE_T ViewSize;
|
||||
NTSTATUS Status;
|
||||
|
||||
CHECK_PARAM_SIZE(lpte, sizeof(THREADENTRY32));
|
||||
|
@ -1233,7 +1233,7 @@ Thread32Next(HANDLE hSnapshot, LPTHREADENTRY32 lpte)
|
|||
BOOL
|
||||
WINAPI
|
||||
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);
|
||||
if(hProcess != NULL)
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
#include <k32.h>
|
||||
#ifdef _M_IX86
|
||||
#include "i386/ketypes.h"
|
||||
#elif defined _M_AMD64
|
||||
#include "amd64/ketypes.h"
|
||||
#endif
|
||||
|
||||
#define NDEBUG
|
||||
|
@ -189,8 +191,8 @@ BasepConvertObjectAttributes(OUT POBJECT_ATTRIBUTES ObjectAttributes,
|
|||
NTSTATUS
|
||||
WINAPI
|
||||
BasepCreateStack(HANDLE hProcess,
|
||||
ULONG StackReserve,
|
||||
ULONG StackCommit,
|
||||
SIZE_T StackReserve,
|
||||
SIZE_T StackCommit,
|
||||
PINITIAL_TEB InitialTeb)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
|
@ -290,7 +292,7 @@ BasepCreateStack(HANDLE hProcess,
|
|||
/* Create a guard page */
|
||||
if (UseGuard)
|
||||
{
|
||||
ULONG GuardPageSize = SystemBasicInfo.PageSize;
|
||||
SIZE_T GuardPageSize = SystemBasicInfo.PageSize;
|
||||
ULONG Dummy;
|
||||
|
||||
/* Attempt maximum space possible */
|
||||
|
@ -318,7 +320,7 @@ WINAPI
|
|||
BasepFreeStack(HANDLE hProcess,
|
||||
PINITIAL_TEB InitialTeb)
|
||||
{
|
||||
ULONG Dummy = 0;
|
||||
SIZE_T Dummy = 0;
|
||||
|
||||
/* Free the Stack */
|
||||
NtFreeVirtualMemory(hProcess,
|
||||
|
@ -376,6 +378,44 @@ BasepInitializeContext(IN PCONTEXT Context,
|
|||
|
||||
/* Give it some room for the Parameter */
|
||||
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
|
||||
#warning Unknown architecture
|
||||
UNIMPLEMENTED;
|
||||
|
|
|
@ -36,8 +36,8 @@ RegisterWaitForInputIdle(WaitForInputIdleType lpfnRegisterWaitForInputIdle);
|
|||
BOOL
|
||||
WINAPI
|
||||
GetProcessAffinityMask(HANDLE hProcess,
|
||||
LPDWORD lpProcessAffinityMask,
|
||||
LPDWORD lpSystemAffinityMask)
|
||||
PDWORD_PTR lpProcessAffinityMask,
|
||||
PDWORD_PTR lpSystemAffinityMask)
|
||||
{
|
||||
PROCESS_BASIC_INFORMATION ProcessInfo;
|
||||
SYSTEM_BASIC_INFORMATION SystemInfo;
|
||||
|
@ -77,7 +77,7 @@ GetProcessAffinityMask(HANDLE hProcess,
|
|||
BOOL
|
||||
WINAPI
|
||||
SetProcessAffinityMask(HANDLE hProcess,
|
||||
DWORD dwProcessAffinityMask)
|
||||
DWORD_PTR dwProcessAffinityMask)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
|
||||
|
@ -284,7 +284,7 @@ DWORD
|
|||
WINAPI
|
||||
GetCurrentProcessId(VOID)
|
||||
{
|
||||
return (DWORD)GetTeb()->ClientId.UniqueProcess;
|
||||
return HandleToUlong(GetTeb()->ClientId.UniqueProcess);
|
||||
}
|
||||
|
||||
|
||||
|
@ -355,7 +355,7 @@ OpenProcess(DWORD dwDesiredAccess,
|
|||
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||
CLIENT_ID ClientId;
|
||||
|
||||
ClientId.UniqueProcess = (HANDLE)dwProcessId;
|
||||
ClientId.UniqueProcess = UlongToHandle(dwProcessId);
|
||||
ClientId.UniqueThread = 0;
|
||||
|
||||
InitializeObjectAttributes(&ObjectAttributes,
|
||||
|
@ -559,7 +559,7 @@ BOOL
|
|||
WINAPI
|
||||
FlushInstructionCache(HANDLE hProcess,
|
||||
LPCVOID lpBaseAddress,
|
||||
DWORD dwSize)
|
||||
SIZE_T dwSize)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
|
||||
|
|
|
@ -325,7 +325,7 @@ BasepDuplicateAndWriteHandle(IN HANDLE ProcessHandle,
|
|||
{
|
||||
NTSTATUS Status;
|
||||
HANDLE DuplicatedHandle;
|
||||
ULONG Dummy;
|
||||
SIZE_T Dummy;
|
||||
|
||||
DPRINT("BasepDuplicateAndWriteHandle. hProcess: %lx, Handle: %lx,"
|
||||
"Address: %p\n", ProcessHandle, StandardHandle, Address);
|
||||
|
|
|
@ -73,7 +73,7 @@ ProcessIdToSessionId(IN DWORD dwProcessId,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
ClientId.UniqueProcess = (HANDLE)dwProcessId;
|
||||
ClientId.UniqueProcess = UlongToHandle(dwProcessId);
|
||||
ClientId.UniqueThread = 0;
|
||||
|
||||
InitializeObjectAttributes(&ObjectAttributes, NULL, 0, NULL, NULL);
|
||||
|
|
17
reactos/dll/win32/kernel32/thread/amd64/fiber.S
Normal file
17
reactos/dll/win32/kernel32/thread/amd64/fiber.S
Normal 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
|
32
reactos/dll/win32/kernel32/thread/amd64/thread.S
Normal file
32
reactos/dll/win32/kernel32/thread/amd64/thread.S
Normal 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 */
|
|
@ -258,6 +258,13 @@ BaseFiberStartup(VOID)
|
|||
DPRINT("Starting Fiber\n");
|
||||
BaseThreadStartup((LPTHREAD_START_ROUTINE)Fiber->Context.Eax,
|
||||
(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
|
||||
#warning Unknown architecture
|
||||
UNIMPLEMENTED;
|
||||
|
|
|
@ -232,7 +232,7 @@ CreateRemoteThread(HANDLE hProcess,
|
|||
}
|
||||
|
||||
/* Success */
|
||||
if(lpThreadId) *lpThreadId = (DWORD)ClientId.UniqueThread;
|
||||
if(lpThreadId) *lpThreadId = HandleToUlong(ClientId.UniqueThread);
|
||||
|
||||
/* Resume it if asked */
|
||||
if (!(dwCreationFlags & CREATE_SUSPENDED))
|
||||
|
@ -344,7 +344,7 @@ DWORD
|
|||
WINAPI
|
||||
GetCurrentThreadId(VOID)
|
||||
{
|
||||
return (DWORD)(NtCurrentTeb()->ClientId).UniqueThread;
|
||||
return HandleToUlong(NtCurrentTeb()->ClientId.UniqueThread);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -684,6 +684,7 @@ GetThreadSelectorEntry(IN HANDLE hThread,
|
|||
IN DWORD dwSelector,
|
||||
OUT LPLDT_ENTRY lpSelectorEntry)
|
||||
{
|
||||
#ifdef _M_IX86
|
||||
DESCRIPTOR_TABLE_ENTRY DescriptionTableEntry;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
@ -704,6 +705,10 @@ GetThreadSelectorEntry(IN HANDLE hThread,
|
|||
/* Success, return the selector */
|
||||
*lpSelectorEntry = DescriptionTableEntry.Descriptor;
|
||||
return TRUE;
|
||||
#else
|
||||
DPRINT1("Calling GetThreadSelectorEntry!\n");
|
||||
return FALSE;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -749,7 +754,7 @@ GetProcessIdOfThread(HANDLE Thread)
|
|||
return 0;
|
||||
}
|
||||
|
||||
return (DWORD)ThreadBasic.ClientId.UniqueProcess;
|
||||
return HandleToUlong(ThreadBasic.ClientId.UniqueProcess);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -772,7 +777,7 @@ GetThreadId(HANDLE Thread)
|
|||
return 0;
|
||||
}
|
||||
|
||||
return (DWORD)ThreadBasic.ClientId.UniqueThread;
|
||||
return HandleToUlong(ThreadBasic.ClientId.UniqueThread);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue