X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=ntoskrnl%2Fps%2Fwin32.c;h=acb2b8b4f8b41b26250d01ac8977aa5859225afb;hp=19dd4e9c43d3ae865dea077146319fdd5b1acfe3;hb=d6dc1fd2310ed67891edc27a49aacc2eb11220f3;hpb=a070e2aaf24b3fb8746916053ac8f30bf26dbd1d diff --git a/ntoskrnl/ps/win32.c b/ntoskrnl/ps/win32.c index 19dd4e9c43d..acb2b8b4f8b 100644 --- a/ntoskrnl/ps/win32.c +++ b/ntoskrnl/ps/win32.c @@ -18,11 +18,13 @@ PKWIN32_PROCESS_CALLOUT PspW32ProcessCallout = NULL; PKWIN32_THREAD_CALLOUT PspW32ThreadCallout = NULL; PGDI_BATCHFLUSH_ROUTINE KeGdiFlushUserBatch = NULL; -extern PKWIN32_PARSEMETHOD_CALLOUT ExpWindowStationObjectParse; -extern PKWIN32_DELETEMETHOD_CALLOUT ExpWindowStationObjectDelete; -extern PKWIN32_OKTOCLOSEMETHOD_CALLOUT ExpWindowStationObjectOkToClose; -extern PKWIN32_OKTOCLOSEMETHOD_CALLOUT ExpDesktopObjectOkToClose; -extern PKWIN32_DELETEMETHOD_CALLOUT ExpDesktopObjectDelete; +extern PKWIN32_SESSION_CALLOUT ExpWindowStationObjectParse; +extern PKWIN32_SESSION_CALLOUT ExpWindowStationObjectDelete; +extern PKWIN32_SESSION_CALLOUT ExpWindowStationObjectOkToClose; +extern PKWIN32_SESSION_CALLOUT ExpDesktopObjectOkToClose; +extern PKWIN32_SESSION_CALLOUT ExpDesktopObjectDelete; +extern PKWIN32_SESSION_CALLOUT ExpDesktopObjectOpen; +extern PKWIN32_SESSION_CALLOUT ExpDesktopObjectClose; extern PKWIN32_POWEREVENT_CALLOUT PopEventCallout; /* PRIVATE FUNCTIONS *********************************************************/ @@ -80,13 +82,9 @@ PsConvertToGuiThread(VOID) MmDeleteKernelStack(OldStack, FALSE); } - /* This check is bizare. Check out win32k later */ - if (!Process->Win32Process) - { - /* Now tell win32k about us */ - Status = PspW32ProcessCallout(Process, TRUE); - if (!NT_SUCCESS(Status)) return Status; - } + /* Always do the process callout! */ + Status = PspW32ProcessCallout(Process, TRUE); + if (!NT_SUCCESS(Status)) return Status; /* Set the new service table */ Thread->Tcb.ServiceTable = KeServiceDescriptorTableShadow; @@ -121,62 +119,10 @@ PsEstablishWin32Callouts(IN PWIN32_CALLOUTS_FPNS CalloutData) ExpWindowStationObjectOkToClose = CalloutData->WindowStationOkToCloseProcedure; ExpDesktopObjectOkToClose = CalloutData->DesktopOkToCloseProcedure; ExpDesktopObjectDelete = CalloutData->DesktopDeleteProcedure; + ExpDesktopObjectOpen = CalloutData->DesktopOpenProcedure; + ExpDesktopObjectClose = CalloutData->DesktopCloseProcedure; PopEventCallout = CalloutData->PowerEventCallout; KeGdiFlushUserBatch = CalloutData->BatchFlushRoutine; } -NTSTATUS -NTAPI -NtW32Call(IN ULONG RoutineIndex, - IN PVOID Argument, - IN ULONG ArgumentLength, - OUT PVOID* Result, - OUT PULONG ResultLength) -{ - PVOID RetResult; - ULONG RetResultLength; - NTSTATUS Status; - ASSERT(KeGetPreviousMode() != KernelMode); - - /* Enter SEH for probing */ - _SEH2_TRY - { - /* Probe arguments */ - ProbeForWritePointer(Result); - ProbeForWriteUlong(ResultLength); - } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) - { - /* Return the exception code */ - _SEH2_YIELD(return _SEH2_GetExceptionCode()); - } - _SEH2_END; - - /* Call kernel function */ - Status = KeUserModeCallback(RoutineIndex, - Argument, - ArgumentLength, - &RetResult, - &RetResultLength); - if (NT_SUCCESS(Status)) - { - /* Enter SEH for write back */ - _SEH2_TRY - { - /* Return results to user mode */ - *Result = RetResult; - *ResultLength = RetResultLength; - } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) - { - /* Get the exception code */ - Status = _SEH2_GetExceptionCode(); - } - _SEH2_END; - } - - /* Return the result */ - return Status; -} - /* EOF */