From fef9d4dc698d20c65518e0a005592efadcde4602 Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Sun, 26 Jun 2005 16:06:32 +0000 Subject: [PATCH] Fixes for NDK compatibily (and plain ol' good design): - Use correct LDRP_ flags instead of our own made up ones. - Remove extra Process Info Classes that aren't in winddk, and use an add-on enumeration in the NDK. - Make ntoskrnl even more unaware of Win32K Internals by removing the deprecated PsCreateWin32Process function, moving w32process/thread allocation to win32k, and fixing the PsEstablishWin32Callouts function to use the latest NT prototype and callout data. These changes are similar to the ones done in NT. svn path=/trunk/; revision=16290 --- reactos/include/ndk/ketypes.h | 29 ++++- reactos/include/ndk/ldrtypes.h | 27 +++-- reactos/include/ndk/obtypes.h | 11 -- reactos/include/ndk/psfuncs.h | 31 ++++-- reactos/include/ndk/pstypes.h | 23 ++++ reactos/include/ndk/zwtypes.h | 6 +- reactos/lib/ntdll/ldr/startup.c | 4 +- reactos/lib/ntdll/ldr/utils.c | 52 ++++----- reactos/ntoskrnl/include/internal/ntoskrnl.h | 2 +- reactos/ntoskrnl/ntoskrnl.def | 3 +- reactos/ntoskrnl/ps/process.c | 14 +++ reactos/ntoskrnl/ps/win32.c | 110 +++++-------------- reactos/w32api/include/ddk/winddk.h | 4 - 13 files changed, 160 insertions(+), 156 deletions(-) diff --git a/reactos/include/ndk/ketypes.h b/reactos/include/ndk/ketypes.h index 0d797dfe3d2..878ee2b73bf 100644 --- a/reactos/include/ndk/ketypes.h +++ b/reactos/include/ndk/ketypes.h @@ -251,13 +251,38 @@ typedef struct _HARDWARE_PTE_X86 ULONG PageFrameNumber : 20; } HARDWARE_PTE_X86, *PHARDWARE_PTE_X86; +typedef struct _DESCRIPTOR +{ + WORD Pad; + WORD Limit; + DWORD Base; +} KDESCRIPTOR, *PKDESCRIPTOR; + +typedef struct _KSPECIAL_REGISTERS +{ + DWORD Cr0; + DWORD Cr2; + DWORD Cr3; + DWORD Cr4; + DWORD KernelDr0; + DWORD KernelDr1; + DWORD KernelDr2; + DWORD KernelDr3; + DWORD KernelDr6; + DWORD KernelDr7; + KDESCRIPTOR Gdtr; + KDESCRIPTOR Idtr; + WORD Tr; + WORD Ldtr; + DWORD Reserved[6]; +} KSPECIAL_REGISTERS, *PKSPECIAL_REGISTERS; + #pragma pack(push,4) -/* Fixme: Use correct types? */ typedef struct _KPROCESSOR_STATE { PCONTEXT ContextFrame; - PVOID SpecialRegisters; + KSPECIAL_REGISTERS SpecialRegisters; } KPROCESSOR_STATE; /* Processor Control Block */ diff --git a/reactos/include/ndk/ldrtypes.h b/reactos/include/ndk/ldrtypes.h index cccfa872c88..14923d8debf 100644 --- a/reactos/include/ndk/ldrtypes.h +++ b/reactos/include/ndk/ldrtypes.h @@ -19,19 +19,24 @@ #define RESOURCE_LANGUAGE_LEVEL 2 #define RESOURCE_DATA_LEVEL 3 -/* FIXME: USE CORRRECT LDR_ FLAGS */ -#define IMAGE_DLL 0x00000004 -#define LOAD_IN_PROGRESS 0x00001000 -#define UNLOAD_IN_PROGRESS 0x00002000 -#define ENTRY_PROCESSED 0x00004000 -#define DONT_CALL_FOR_THREAD 0x00040000 -#define PROCESS_ATTACH_CALLED 0x00080000 -#define IMAGE_NOT_AT_BASE 0x00200000 +/* LDR_DATA_TABLE_ENTRY Flags */ +#define LDRP_STATIC_LINK 0x00000002 +#define LDRP_IMAGE_DLL 0x00000004 +#define LDRP_LOAD_IN_PROGRESS 0x00001000 +#define LDRP_UNLOAD_IN_PROGRESS 0x00002000 +#define LDRP_ENTRY_PROCESSED 0x00004000 +#define LDRP_ENTRY_INSERTED 0x00008000 +#define LDRP_CURRENT_LOAD 0x00010000 +#define LDRP_FAILED_BUILTIN_LOAD 0x00020000 +#define LDRP_DONT_CALL_FOR_THREADS 0x00040000 +#define LDRP_PROCESS_ATTACH_CALLED 0x00080000 +#define LDRP_DEBUG_SYMBOLS_LOADED 0x00100000 +#define LDRP_IMAGE_NOT_AT_BASE 0x00200000 +#define LDRP_WX86_IGNORE_MACHINETYPE 0x00400000 /* ENUMERATIONS **************************************************************/ /* TYPES *********************************************************************/ -/* FIXME: Update with _LDR_DATA_TABLE_ENTRY and LDR_ flags */ typedef struct _PEB_LDR_DATA { ULONG Length; @@ -54,8 +59,8 @@ typedef struct _LDR_DATA_TABLE_ENTRY UNICODE_STRING FullDllName; UNICODE_STRING BaseDllName; ULONG Flags; - USHORT LoadCount; /* FIXME: HACK!!! FIX ASAP */ - USHORT TlsIndex; /* FIXME: HACK!!! FIX ASAP */ + USHORT LoadCount; + USHORT TlsIndex; LIST_ENTRY HashLinks; PVOID SectionPointer; ULONG CheckSum; diff --git a/reactos/include/ndk/obtypes.h b/reactos/include/ndk/obtypes.h index a3045d6a3a8..7b97d2df114 100644 --- a/reactos/include/ndk/obtypes.h +++ b/reactos/include/ndk/obtypes.h @@ -115,17 +115,6 @@ typedef NTSTATUS /* TYPES *********************************************************************/ -/* FIXME: Does this match NT's? */ -typedef struct _W32_OBJECT_CALLBACK -{ - OB_OPEN_METHOD WinStaCreate; - OB_PARSE_METHOD WinStaParse; - OB_DELETE_METHOD WinStaDelete; - OB_FIND_METHOD WinStaFind; - OB_CREATE_METHOD DesktopCreate; - OB_DELETE_METHOD DesktopDelete; -} W32_OBJECT_CALLBACK, *PW32_OBJECT_CALLBACK; - typedef struct _OBJECT_BASIC_INFORMATION { ULONG Attributes; diff --git a/reactos/include/ndk/psfuncs.h b/reactos/include/ndk/psfuncs.h index a7be1086053..c4cf113d29b 100644 --- a/reactos/include/ndk/psfuncs.h +++ b/reactos/include/ndk/psfuncs.h @@ -14,6 +14,28 @@ /* PROTOTYPES ****************************************************************/ +PVOID +STDCALL +PsGetProcessWin32Process(PEPROCESS Process); + +VOID +STDCALL +PsSetProcessWin32Process( + PEPROCESS Process, + PVOID Win32Process +); + +VOID +STDCALL +PsSetThreadWin32Thread( + PETHREAD Thread, + PVOID Win32Thread +); + +PVOID +STDCALL +PsGetThreadWin32Thread(PETHREAD Thread); + VOID STDCALL PsRevertThreadToSelf( @@ -34,14 +56,7 @@ PsGetWin32Process( VOID STDCALL -PsEstablishWin32Callouts( - PW32_PROCESS_CALLBACK W32ProcessCallback, - PW32_THREAD_CALLBACK W32ThreadCallback, - PW32_OBJECT_CALLBACK W32ObjectCallback, - PVOID Param4, - ULONG W32ThreadSize, - ULONG W32ProcessSize -); +PsEstablishWin32Callouts(PW32_CALLOUT_DATA CalloutData); HANDLE STDCALL diff --git a/reactos/include/ndk/pstypes.h b/reactos/include/ndk/pstypes.h index 085921db0e0..38655cd6259 100644 --- a/reactos/include/ndk/pstypes.h +++ b/reactos/include/ndk/pstypes.h @@ -617,6 +617,29 @@ typedef struct _EJOB } EJOB, *PEJOB; #include +typedef struct _W32_CALLOUT_DATA +{ + PW32_PROCESS_CALLBACK W32ProcessCallout; + PW32_THREAD_CALLBACK W32ThreadCallout; + PVOID UserGlobalAtomTableCallout; + PVOID UserPowerEventCallout; + PVOID UserPowerStateCallout; + PVOID UserJobCallout; + PVOID NtGdiUserFlushUserBatch; + OB_OPEN_METHOD DesktopOpen; + PVOID DesktopUnmap; + OB_DELETE_METHOD DesktopDelete; + OB_OKAYTOCLOSE_METHOD WinstaOkayToClose; + OB_DELETE_METHOD WinStaDelete; + OB_PARSE_METHOD WinStaParse; + OB_OPEN_METHOD WinStaOpen; + + /* FIXME: These are ROS-ONLY and are fixed in a future local patch */ + OB_FIND_METHOD WinStaFind; + OB_OPEN_METHOD WinStaCreate; + OB_CREATE_METHOD DesktopCreate; +} W32_CALLOUT_DATA, *PW32_CALLOUT_DATA; + #endif #endif diff --git a/reactos/include/ndk/zwtypes.h b/reactos/include/ndk/zwtypes.h index 157db971ad3..bfaba1d642e 100644 --- a/reactos/include/ndk/zwtypes.h +++ b/reactos/include/ndk/zwtypes.h @@ -95,16 +95,14 @@ typedef enum _SYSTEM_DOCK_STATE /* * Process (extra ones not defined in DDK) */ -/* FIXME: Temporary hack until all KMODE stuf are NDK */ -#ifndef __WINDDK_H typedef enum _PROCESS_INFORMATION_FLAGS { ProcessUnknown33 = 33, ProcessUnknown34, ProcessUnknown35, - ProcessCookie + ProcessCookie, + MaximumProcessInformationClass } PROCESS_INFORMATION_FLAGS; -#endif /* * System diff --git a/reactos/lib/ntdll/ldr/startup.c b/reactos/lib/ntdll/ldr/startup.c index 104ebe566b9..dbdbeac9475 100644 --- a/reactos/lib/ntdll/ldr/startup.c +++ b/reactos/lib/ntdll/ldr/startup.c @@ -366,7 +366,7 @@ __true_LdrInitializeThunk (ULONG Unknown1, FullNtDllPath); RtlCreateUnicodeString (&NtModule->BaseDllName, L"ntdll.dll"); - NtModule->Flags = IMAGE_DLL|ENTRY_PROCESSED; + NtModule->Flags = LDRP_IMAGE_DLL|LDRP_ENTRY_PROCESSED; NtModule->LoadCount = -1; /* don't unload */ NtModule->TlsIndex = -1; @@ -415,7 +415,7 @@ __true_LdrInitializeThunk (ULONG Unknown1, &ExeModule->BaseDllName, &ExeModule->FullDllName); - ExeModule->Flags = ENTRY_PROCESSED; + ExeModule->Flags = LDRP_ENTRY_PROCESSED; ExeModule->LoadCount = -1; /* don't unload */ ExeModule->TlsIndex = -1; ExeModule->SectionPointer = NULL; diff --git a/reactos/lib/ntdll/ldr/utils.c b/reactos/lib/ntdll/ldr/utils.c index f6d4437a1dd..0ec43b1ae1c 100644 --- a/reactos/lib/ntdll/ldr/utils.c +++ b/reactos/lib/ntdll/ldr/utils.c @@ -170,7 +170,7 @@ static inline VOID LdrpTlsCallback(PLDR_DATA_TABLE_ENTRY Module, ULONG dwReason) static BOOLEAN LdrpCallDllEntry(PLDR_DATA_TABLE_ENTRY Module, DWORD dwReason, PVOID lpReserved) { - if (!(Module->Flags & IMAGE_DLL) || + if (!(Module->Flags & LDRP_IMAGE_DLL) || Module->EntryPoint == 0) { return TRUE; @@ -1723,7 +1723,7 @@ LdrFixupImports(IN PWSTR SearchPath OPTIONAL, { BOOLEAN WrongForwarder; WrongForwarder = FALSE; - if (ImportedModule->Flags & IMAGE_NOT_AT_BASE) + if (ImportedModule->Flags & LDRP_IMAGE_NOT_AT_BASE) { TRACE_LDR("%wZ has stale binding to %s\n", &Module->BaseDllName, ImportedName); @@ -1757,7 +1757,7 @@ LdrFixupImports(IN PWSTR SearchPath OPTIONAL, LdrpDecrementLoadCount(Module, FALSE); } if (ForwarderModule->TimeDateStamp != BoundForwarderRef->TimeDateStamp || - ForwarderModule->Flags & IMAGE_NOT_AT_BASE) + ForwarderModule->Flags & LDRP_IMAGE_NOT_AT_BASE) { TRACE_LDR("%wZ has stale binding to %s\n", &Module->BaseDllName, ForwarderName); @@ -1771,7 +1771,7 @@ LdrFixupImports(IN PWSTR SearchPath OPTIONAL, } } if (WrongForwarder || - ImportedModule->Flags & IMAGE_NOT_AT_BASE) + ImportedModule->Flags & LDRP_IMAGE_NOT_AT_BASE) { Status = LdrpProcessImportDirectory(Module, ImportedModule, ImportedName); if (!NT_SUCCESS(Status)) @@ -1780,7 +1780,7 @@ LdrFixupImports(IN PWSTR SearchPath OPTIONAL, return Status; } } - else if (ImportedModule->Flags & IMAGE_NOT_AT_BASE) + else if (ImportedModule->Flags & LDRP_IMAGE_NOT_AT_BASE) { TRACE_LDR("Adjust imports for %s from %wZ\n", ImportedName, &Module->BaseDllName); @@ -1938,7 +1938,7 @@ PEPFUNC LdrPEStartup (PVOID ImageBase, if (ImageBase != (PVOID) NTHeaders->OptionalHeader.ImageBase) { - (*Module)->Flags |= IMAGE_NOT_AT_BASE; + (*Module)->Flags |= LDRP_IMAGE_NOT_AT_BASE; } /* @@ -2107,11 +2107,11 @@ LdrpLoadModule(IN PWSTR SearchPath OPTIONAL, (*Module)->SectionPointer = SectionHandle; if (ImageBase != (PVOID) NtHeaders->OptionalHeader.ImageBase) { - (*Module)->Flags |= IMAGE_NOT_AT_BASE; + (*Module)->Flags |= LDRP_IMAGE_NOT_AT_BASE; } if (NtHeaders->FileHeader.Characteristics & IMAGE_FILE_DLL) { - (*Module)->Flags |= IMAGE_DLL; + (*Module)->Flags |= LDRP_IMAGE_DLL; } /* fixup the imported calls entry points */ Status = LdrFixupImports(SearchPath, *Module); @@ -2292,7 +2292,7 @@ LdrDisableThreadCalloutsForDll(IN PVOID BaseAddress) { if (Module->TlsIndex == 0xFFFF) { - Module->Flags |= DONT_CALL_FOR_THREAD; + Module->Flags |= LDRP_DONT_CALL_FOR_THREADS; Status = STATUS_SUCCESS; } break; @@ -2420,15 +2420,15 @@ LdrpDetachProcess(BOOLEAN UnloadAll) { Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InInitializationOrderModuleList); if (((UnloadAll && Module->LoadCount <= 0) || Module->LoadCount == 0) && - Module->Flags & ENTRY_PROCESSED && - !(Module->Flags & UNLOAD_IN_PROGRESS)) + Module->Flags & LDRP_ENTRY_PROCESSED && + !(Module->Flags & LDRP_UNLOAD_IN_PROGRESS)) { - Module->Flags |= UNLOAD_IN_PROGRESS; + Module->Flags |= LDRP_UNLOAD_IN_PROGRESS; if (Module == LdrpLastModule) { LdrpLastModule = NULL; } - if (Module->Flags & PROCESS_ATTACH_CALLED) + if (Module->Flags & LDRP_PROCESS_ATTACH_CALLED) { TRACE_LDR("Unload %wZ - Calling entry point at %x\n", &Module->BaseDllName, Module->EntryPoint); @@ -2453,7 +2453,7 @@ LdrpDetachProcess(BOOLEAN UnloadAll) { Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InInitializationOrderModuleList); Entry = Entry->Blink; - if (Module->Flags & UNLOAD_IN_PROGRESS && + if (Module->Flags & LDRP_UNLOAD_IN_PROGRESS && ((UnloadAll && Module->LoadCount != 0xFFFF) || Module->LoadCount == 0)) { /* remove the module entry from the list */ @@ -2512,9 +2512,9 @@ LdrpAttachProcess(VOID) while (Entry != ModuleListHead) { Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InInitializationOrderModuleList); - if (!(Module->Flags & (LOAD_IN_PROGRESS|UNLOAD_IN_PROGRESS|ENTRY_PROCESSED))) + if (!(Module->Flags & (LDRP_LOAD_IN_PROGRESS|LDRP_UNLOAD_IN_PROGRESS|LDRP_ENTRY_PROCESSED))) { - Module->Flags |= LOAD_IN_PROGRESS; + Module->Flags |= LDRP_LOAD_IN_PROGRESS; TRACE_LDR("%wZ loaded - Calling init routine at %x for process attaching\n", &Module->BaseDllName, Module->EntryPoint); Result = LdrpCallDllEntry(Module, DLL_PROCESS_ATTACH, (PVOID)(Module->LoadCount == 0xFFFF ? 1 : 0)); @@ -2523,15 +2523,15 @@ LdrpAttachProcess(VOID) Status = STATUS_DLL_INIT_FAILED; break; } - if (Module->Flags & IMAGE_DLL && Module->EntryPoint != 0) + if (Module->Flags & LDRP_IMAGE_DLL && Module->EntryPoint != 0) { - Module->Flags |= PROCESS_ATTACH_CALLED|ENTRY_PROCESSED; + Module->Flags |= LDRP_PROCESS_ATTACH_CALLED|LDRP_ENTRY_PROCESSED; } else { - Module->Flags |= ENTRY_PROCESSED; + Module->Flags |= LDRP_ENTRY_PROCESSED; } - Module->Flags &= ~LOAD_IN_PROGRESS; + Module->Flags &= ~LDRP_LOAD_IN_PROGRESS; } Entry = Entry->Flink; } @@ -2578,9 +2578,9 @@ LdrpAttachThread (VOID) while (Entry != ModuleListHead) { Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InInitializationOrderModuleList); - if (Module->Flags & PROCESS_ATTACH_CALLED && - !(Module->Flags & DONT_CALL_FOR_THREAD) && - !(Module->Flags & UNLOAD_IN_PROGRESS)) + if (Module->Flags & LDRP_PROCESS_ATTACH_CALLED && + !(Module->Flags & LDRP_DONT_CALL_FOR_THREADS) && + !(Module->Flags & LDRP_UNLOAD_IN_PROGRESS)) { TRACE_LDR("%wZ - Calling entry point at %x for thread attaching\n", &Module->BaseDllName, Module->EntryPoint); @@ -2623,9 +2623,9 @@ LdrShutdownThread (VOID) { Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InInitializationOrderModuleList); - if (Module->Flags & PROCESS_ATTACH_CALLED && - !(Module->Flags & DONT_CALL_FOR_THREAD) && - !(Module->Flags & UNLOAD_IN_PROGRESS)) + if (Module->Flags & LDRP_PROCESS_ATTACH_CALLED && + !(Module->Flags & LDRP_DONT_CALL_FOR_THREADS) && + !(Module->Flags & LDRP_UNLOAD_IN_PROGRESS)) { TRACE_LDR("%wZ - Calling entry point at %x for thread detaching\n", &Module->BaseDllName, Module->EntryPoint); diff --git a/reactos/ntoskrnl/include/internal/ntoskrnl.h b/reactos/ntoskrnl/include/internal/ntoskrnl.h index ce988463206..ad3bd50d081 100644 --- a/reactos/ntoskrnl/include/internal/ntoskrnl.h +++ b/reactos/ntoskrnl/include/internal/ntoskrnl.h @@ -43,7 +43,7 @@ /* * Defines a descriptor as it appears in the processor tables */ -typedef struct _DESCRIPTOR +typedef struct __DESCRIPTOR { ULONG a; ULONG b; diff --git a/reactos/ntoskrnl/ntoskrnl.def b/reactos/ntoskrnl/ntoskrnl.def index 73871af02f4..a0bfb83a5ad 100644 --- a/reactos/ntoskrnl/ntoskrnl.def +++ b/reactos/ntoskrnl/ntoskrnl.def @@ -871,11 +871,10 @@ PsChargeProcessPagedPoolQuota@8 PsChargeProcessPoolQuota@12 PsCreateSystemProcess@12 PsCreateSystemThread@28 -PsCreateWin32Process@4 PsDereferenceImpersonationToken@4=PsDereferencePrimaryToken@4 PsDereferencePrimaryToken@4 PsDisableImpersonation@8 -PsEstablishWin32Callouts@24 +PsEstablishWin32Callouts@4 PsGetCurrentProcessId@0 PsGetCurrentProcessSessionId@0 PsGetCurrentThreadId@0 diff --git a/reactos/ntoskrnl/ps/process.c b/reactos/ntoskrnl/ps/process.c index e01af16d7f7..6640dc19636 100644 --- a/reactos/ntoskrnl/ps/process.c +++ b/reactos/ntoskrnl/ps/process.c @@ -669,6 +669,20 @@ PsGetProcessSessionId(PEPROCESS Process) return (HANDLE)Process->Session; } +struct _W32THREAD* +STDCALL +PsGetWin32Thread(VOID) +{ + return(PsGetCurrentThread()->Tcb.Win32Thread); +} + +struct _W32PROCESS* +STDCALL +PsGetWin32Process(VOID) +{ + return (struct _W32PROCESS*)PsGetCurrentProcess()->Win32Process; +} + /* * @implemented */ diff --git a/reactos/ntoskrnl/ps/win32.c b/reactos/ntoskrnl/ps/win32.c index 477549e73f1..065da8c90dc 100644 --- a/reactos/ntoskrnl/ps/win32.c +++ b/reactos/ntoskrnl/ps/win32.c @@ -18,8 +18,6 @@ static PW32_PROCESS_CALLBACK PspWin32ProcessCallback = NULL; static PW32_THREAD_CALLBACK PspWin32ThreadCallback = NULL; -static ULONG PspWin32ProcessSize = 0; -static ULONG PspWin32ThreadSize = 0; extern OB_OPEN_METHOD ExpWindowStationObjectOpen; extern OB_PARSE_METHOD ExpWindowStationObjectParse; @@ -45,106 +43,48 @@ typedef struct _NTW32CALL_SAVED_STATE /* FUNCTIONS ***************************************************************/ -struct _W32THREAD* -STDCALL -PsGetWin32Thread(VOID) -{ - return(PsGetCurrentThread()->Tcb.Win32Thread); -} - -struct _W32PROCESS* -STDCALL -PsGetWin32Process(VOID) -{ - return (struct _W32PROCESS*)PsGetCurrentProcess()->Win32Process; -} - -NTSTATUS STDCALL -PsCreateWin32Process(PEPROCESS Process) -{ - if (Process->Win32Process != NULL) - return(STATUS_SUCCESS); - - Process->Win32Process = ExAllocatePool(NonPagedPool, - PspWin32ProcessSize); - if (Process->Win32Process == NULL) - return(STATUS_NO_MEMORY); - - RtlZeroMemory(Process->Win32Process, - PspWin32ProcessSize); - - return(STATUS_SUCCESS); -} - - /* * @implemented */ -VOID STDCALL -PsEstablishWin32Callouts (PW32_PROCESS_CALLBACK W32ProcessCallback, - PW32_THREAD_CALLBACK W32ThreadCallback, - PW32_OBJECT_CALLBACK W32ObjectCallback, - PVOID Param4, - ULONG W32ThreadSize, - ULONG W32ProcessSize) +VOID +STDCALL +PsEstablishWin32Callouts(PW32_CALLOUT_DATA CalloutData) { - PspWin32ProcessCallback = W32ProcessCallback; - PspWin32ThreadCallback = W32ThreadCallback; - - PspWin32ProcessSize = W32ProcessSize; - PspWin32ThreadSize = W32ThreadSize; - - ExpWindowStationObjectOpen = W32ObjectCallback->WinStaCreate; - ExpWindowStationObjectParse = W32ObjectCallback->WinStaParse; - ExpWindowStationObjectDelete = W32ObjectCallback->WinStaDelete; - ExpWindowStationObjectFind = W32ObjectCallback->WinStaFind; - ExpDesktopObjectCreate = W32ObjectCallback->DesktopCreate; - ExpDesktopObjectDelete = W32ObjectCallback->DesktopDelete; + PspWin32ProcessCallback = CalloutData->W32ProcessCallout; + PspWin32ThreadCallback = CalloutData->W32ThreadCallout; + ExpWindowStationObjectOpen = CalloutData->WinStaCreate; + ExpWindowStationObjectParse = CalloutData->WinStaParse; + ExpWindowStationObjectDelete = CalloutData->WinStaDelete; + ExpWindowStationObjectFind = CalloutData->WinStaFind; + ExpDesktopObjectCreate = CalloutData->DesktopCreate; + ExpDesktopObjectDelete = CalloutData->DesktopDelete; } NTSTATUS PsInitWin32Thread (PETHREAD Thread) { - PEPROCESS Process; + PEPROCESS Process; + NTSTATUS Status; - Process = Thread->ThreadsProcess; + Process = Thread->ThreadsProcess; - if (Process->Win32Process == NULL) + if (Process->Win32Process == NULL) { - /* FIXME - lock the process */ - Process->Win32Process = ExAllocatePool (NonPagedPool, - PspWin32ProcessSize); - - if (Process->Win32Process == NULL) - return STATUS_NO_MEMORY; - - RtlZeroMemory (Process->Win32Process, - PspWin32ProcessSize); - /* FIXME - unlock the process */ - - if (PspWin32ProcessCallback != NULL) - { - PspWin32ProcessCallback (Process, TRUE); - } + if (PspWin32ProcessCallback != NULL) + { + Status = PspWin32ProcessCallback(Process, TRUE); + } } - if (Thread->Tcb.Win32Thread == NULL) + if (Thread->Tcb.Win32Thread == NULL) { - Thread->Tcb.Win32Thread = ExAllocatePool (NonPagedPool, - PspWin32ThreadSize); - if (Thread->Tcb.Win32Thread == NULL) - return STATUS_NO_MEMORY; - - RtlZeroMemory (Thread->Tcb.Win32Thread, - PspWin32ThreadSize); - - if (PspWin32ThreadCallback != NULL) - { - PspWin32ThreadCallback (Thread, TRUE); - } + if (PspWin32ThreadCallback != NULL) + { + Status = PspWin32ThreadCallback(Thread, TRUE); + } } - return(STATUS_SUCCESS); + return Status; } diff --git a/reactos/w32api/include/ddk/winddk.h b/reactos/w32api/include/ddk/winddk.h index 4d2ec196a4d..3e7d82be5fe 100644 --- a/reactos/w32api/include/ddk/winddk.h +++ b/reactos/w32api/include/ddk/winddk.h @@ -4330,10 +4330,6 @@ typedef enum _PROCESSINFOCLASS { ProcessDebugObjectHandle, ProcessDebugFlags, ProcessHandleTracing, - ProcessUnknown33, - ProcessUnknown34, - ProcessUnknown35, - ProcessCookie, MaxProcessInfoClass } PROCESSINFOCLASS;