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. Modified: trunk/reactos/include/ndk/ketypes.h Modified: trunk/reactos/include/ndk/ldrtypes.h Modified: trunk/reactos/include/ndk/obtypes.h Modified: trunk/reactos/include/ndk/psfuncs.h Modified: trunk/reactos/include/ndk/pstypes.h Modified: trunk/reactos/include/ndk/zwtypes.h Modified: trunk/reactos/lib/ntdll/ldr/startup.c Modified: trunk/reactos/lib/ntdll/ldr/utils.c Modified: trunk/reactos/ntoskrnl/include/internal/ntoskrnl.h Modified: trunk/reactos/ntoskrnl/ntoskrnl.def Modified: trunk/reactos/ntoskrnl/ps/process.c Modified: trunk/reactos/ntoskrnl/ps/win32.c Modified: trunk/reactos/w32api/include/ddk/winddk.h _____
Modified: trunk/reactos/include/ndk/ketypes.h --- trunk/reactos/include/ndk/ketypes.h 2005-06-26 15:49:56 UTC (rev 16289) +++ trunk/reactos/include/ndk/ketypes.h 2005-06-26 16:06:32 UTC (rev 16290) @@ -251,13 +251,38 @@
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 */ _____
Modified: trunk/reactos/include/ndk/ldrtypes.h --- trunk/reactos/include/ndk/ldrtypes.h 2005-06-26 15:49:56 UTC (rev 16289) +++ trunk/reactos/include/ndk/ldrtypes.h 2005-06-26 16:06:32 UTC (rev 16290) @@ -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 @@ 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; _____
Modified: trunk/reactos/include/ndk/obtypes.h --- trunk/reactos/include/ndk/obtypes.h 2005-06-26 15:49:56 UTC (rev 16289) +++ trunk/reactos/include/ndk/obtypes.h 2005-06-26 16:06:32 UTC (rev 16290) @@ -115,17 +115,6 @@
/* 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; _____
Modified: trunk/reactos/include/ndk/psfuncs.h --- trunk/reactos/include/ndk/psfuncs.h 2005-06-26 15:49:56 UTC (rev 16289) +++ trunk/reactos/include/ndk/psfuncs.h 2005-06-26 16:06:32 UTC (rev 16290) @@ -14,8 +14,30 @@
/* 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( IN struct _ETHREAD* Thread ); @@ -34,14 +56,7 @@
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 _____
Modified: trunk/reactos/include/ndk/pstypes.h --- trunk/reactos/include/ndk/pstypes.h 2005-06-26 15:49:56 UTC (rev 16289) +++ trunk/reactos/include/ndk/pstypes.h 2005-06-26 16:06:32 UTC (rev 16290) @@ -617,6 +617,29 @@
} EJOB, *PEJOB; #include <poppack.h>
+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 _____
Modified: trunk/reactos/include/ndk/zwtypes.h --- trunk/reactos/include/ndk/zwtypes.h 2005-06-26 15:49:56 UTC (rev 16289) +++ trunk/reactos/include/ndk/zwtypes.h 2005-06-26 16:06:32 UTC (rev 16290) @@ -95,16 +95,14 @@
/* * 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 _____
Modified: trunk/reactos/lib/ntdll/ldr/startup.c --- trunk/reactos/lib/ntdll/ldr/startup.c 2005-06-26 15:49:56 UTC (rev 16289) +++ trunk/reactos/lib/ntdll/ldr/startup.c 2005-06-26 16:06:32 UTC (rev 16290) @@ -366,7 +366,7 @@
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 @@ &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; _____
Modified: trunk/reactos/lib/ntdll/ldr/utils.c --- trunk/reactos/lib/ntdll/ldr/utils.c 2005-06-26 15:49:56 UTC (rev 16289) +++ trunk/reactos/lib/ntdll/ldr/utils.c 2005-06-26 16:06:32 UTC (rev 16290) @@ -170,7 +170,7 @@
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 @@ { 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 @@ 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 @@ } } 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 @@ 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 @@
if (ImageBase != (PVOID) NTHeaders->OptionalHeader.ImageBase) { - (*Module)->Flags |= IMAGE_NOT_AT_BASE; + (*Module)->Flags |= LDRP_IMAGE_NOT_AT_BASE; }
/* @@ -2107,11 +2107,11 @@ (*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 @@ { 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 @@ { 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 @@ { 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 @@ 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 @@ 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 @@ 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 @@ { 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); _____
Modified: trunk/reactos/ntoskrnl/include/internal/ntoskrnl.h --- trunk/reactos/ntoskrnl/include/internal/ntoskrnl.h 2005-06-26 15:49:56 UTC (rev 16289) +++ trunk/reactos/ntoskrnl/include/internal/ntoskrnl.h 2005-06-26 16:06:32 UTC (rev 16290) @@ -43,7 +43,7 @@
/* * Defines a descriptor as it appears in the processor tables */ -typedef struct _DESCRIPTOR +typedef struct __DESCRIPTOR { ULONG a; ULONG b; _____
Modified: trunk/reactos/ntoskrnl/ntoskrnl.def --- trunk/reactos/ntoskrnl/ntoskrnl.def 2005-06-26 15:49:56 UTC (rev 16289) +++ trunk/reactos/ntoskrnl/ntoskrnl.def 2005-06-26 16:06:32 UTC (rev 16290) @@ -871,11 +871,10 @@
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 _____
Modified: trunk/reactos/ntoskrnl/ps/process.c --- trunk/reactos/ntoskrnl/ps/process.c 2005-06-26 15:49:56 UTC (rev 16289) +++ trunk/reactos/ntoskrnl/ps/process.c 2005-06-26 16:06:32 UTC (rev 16290) @@ -669,6 +669,20 @@
return (HANDLE)Process->Session; }
+struct _W32THREAD* +STDCALL +PsGetWin32Thread(VOID) +{ + return(PsGetCurrentThread()->Tcb.Win32Thread); +} + +struct _W32PROCESS* +STDCALL +PsGetWin32Process(VOID) +{ + return (struct _W32PROCESS*)PsGetCurrentProcess()->Win32Process; +} + /* * @implemented */ _____
Modified: trunk/reactos/ntoskrnl/ps/win32.c --- trunk/reactos/ntoskrnl/ps/win32.c 2005-06-26 15:49:56 UTC (rev 16289) +++ trunk/reactos/ntoskrnl/ps/win32.c 2005-06-26 16:06:32 UTC (rev 16290) @@ -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 @@
/* 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; }
_____
Modified: trunk/reactos/w32api/include/ddk/winddk.h --- trunk/reactos/w32api/include/ddk/winddk.h 2005-06-26 15:49:56 UTC (rev 16289) +++ trunk/reactos/w32api/include/ddk/winddk.h 2005-06-26 16:06:32 UTC (rev 16290) @@ -4330,10 +4330,6 @@
ProcessDebugObjectHandle, ProcessDebugFlags, ProcessHandleTracing, - ProcessUnknown33, - ProcessUnknown34, - ProcessUnknown35, - ProcessCookie, MaxProcessInfoClass } PROCESSINFOCLASS;