Use KeStackAttachProcess/KeUnstackDetachProcess instead of KeAttachProcess/KeDetachProcess. Modified: trunk/reactos/drivers/video/videoprt/int10.c Modified: trunk/reactos/drivers/video/videoprt/videoprt.c Modified: trunk/reactos/drivers/video/videoprt/videoprt.h _____
Modified: trunk/reactos/drivers/video/videoprt/int10.c --- trunk/reactos/drivers/video/videoprt/int10.c 2005-06-14 18:39:12 UTC (rev 15914) +++ trunk/reactos/drivers/video/videoprt/int10.c 2005-06-14 20:24:02 UTC (rev 15915) @@ -36,11 +36,11 @@
PVOID MemoryAddress; NTSTATUS Status; PKPROCESS CallingProcess; - PKPROCESS PrevAttachedProcess; + KAPC_STATE ApcState;
DPRINT("IntInt10AllocateBuffer\n");
- IntAttachToCSRSS(&CallingProcess, &PrevAttachedProcess); + IntAttachToCSRSS(&CallingProcess, &ApcState);
MemoryAddress = (PVOID)0x20000; Status = ZwAllocateVirtualMemory(NtCurrentProcess(), &MemoryAddress, 0, @@ -49,7 +49,7 @@ if (!NT_SUCCESS(Status)) { DPRINT("- ZwAllocateVirtualMemory failed\n"); - IntDetachFromCSRSS(&CallingProcess, &PrevAttachedProcess); + IntDetachFromCSRSS(&CallingProcess, &ApcState); return ERROR_NOT_ENOUGH_MEMORY; }
@@ -58,7 +58,7 @@ ZwFreeVirtualMemory(NtCurrentProcess(), &MemoryAddress, Length, MEM_RELEASE); DPRINT("- Unacceptable memory allocated\n"); - IntDetachFromCSRSS(&CallingProcess, &PrevAttachedProcess); + IntDetachFromCSRSS(&CallingProcess, &ApcState); return ERROR_NOT_ENOUGH_MEMORY; }
@@ -69,7 +69,7 @@ DPRINT("- Offset: %x\n", (ULONG)MemoryAddress & 0xF); DPRINT("- Length: %x\n", *Length);
- IntDetachFromCSRSS(&CallingProcess, &PrevAttachedProcess); + IntDetachFromCSRSS(&CallingProcess, &ApcState);
return NO_ERROR; } @@ -83,16 +83,16 @@ PVOID MemoryAddress = (PVOID)((Seg << 4) | Off); NTSTATUS Status; PKPROCESS CallingProcess; - PKPROCESS PrevAttachedProcess; + KAPC_STATE ApcState;
DPRINT("IntInt10FreeBuffer\n"); DPRINT("- Segment: %x\n", Seg); DPRINT("- Offset: %x\n", Off);
- IntAttachToCSRSS(&CallingProcess, &PrevAttachedProcess); + IntAttachToCSRSS(&CallingProcess, &ApcState); Status = ZwFreeVirtualMemory(NtCurrentProcess(), &MemoryAddress, 0, MEM_RELEASE); - IntDetachFromCSRSS(&CallingProcess, &PrevAttachedProcess); + IntDetachFromCSRSS(&CallingProcess, &ApcState);
return Status; } @@ -106,7 +106,7 @@ IN ULONG Length) { PKPROCESS CallingProcess; - PKPROCESS PrevAttachedProcess; + KAPC_STATE ApcState;
DPRINT("IntInt10ReadMemory\n"); DPRINT("- Segment: %x\n", Seg); @@ -114,9 +114,9 @@ DPRINT("- Buffer: %x\n", Buffer); DPRINT("- Length: %x\n", Length);
- IntAttachToCSRSS(&CallingProcess, &PrevAttachedProcess); + IntAttachToCSRSS(&CallingProcess, &ApcState); RtlCopyMemory(Buffer, (PVOID)((Seg << 4) | Off), Length); - IntDetachFromCSRSS(&CallingProcess, &PrevAttachedProcess); + IntDetachFromCSRSS(&CallingProcess, &ApcState);
return NO_ERROR; } @@ -130,7 +130,7 @@ IN ULONG Length) { PKPROCESS CallingProcess; - PKPROCESS PrevAttachedProcess; + KAPC_STATE ApcState;
DPRINT("IntInt10WriteMemory\n"); DPRINT("- Segment: %x\n", Seg); @@ -138,9 +138,9 @@ DPRINT("- Buffer: %x\n", Buffer); DPRINT("- Length: %x\n", Length);
- IntAttachToCSRSS(&CallingProcess, &PrevAttachedProcess); + IntAttachToCSRSS(&CallingProcess, &ApcState); RtlCopyMemory((PVOID)((Seg << 4) | Off), Buffer, Length); - IntDetachFromCSRSS(&CallingProcess, &PrevAttachedProcess); + IntDetachFromCSRSS(&CallingProcess, &ApcState);
return NO_ERROR; } @@ -153,11 +153,11 @@ KV86M_REGISTERS Regs; NTSTATUS Status; PKPROCESS CallingProcess; - PKPROCESS PrevAttachedProcess; + KAPC_STATE ApcState;
DPRINT("IntInt10CallBios\n");
- IntAttachToCSRSS(&CallingProcess, &PrevAttachedProcess); + IntAttachToCSRSS(&CallingProcess, &ApcState);
memset(&Regs, 0, sizeof(Regs)); DPRINT("- Input register Eax: %x\n", BiosArguments->Eax); @@ -189,7 +189,7 @@ BiosArguments->SegDs = Regs.Ds; BiosArguments->SegEs = Regs.Es;
- IntDetachFromCSRSS(&CallingProcess, &PrevAttachedProcess); + IntDetachFromCSRSS(&CallingProcess, &ApcState);
return Status; } @@ -208,7 +208,7 @@ KV86M_REGISTERS Regs; NTSTATUS Status; PKPROCESS CallingProcess; - PKPROCESS PrevAttachedProcess; + KAPC_STATE ApcState;
DPRINT("VideoPortInt10\n");
@@ -217,7 +217,7 @@ return ERROR_INVALID_PARAMETER; }
- IntAttachToCSRSS(&CallingProcess, &PrevAttachedProcess); + IntAttachToCSRSS(&CallingProcess, &ApcState);
memset(&Regs, 0, sizeof(Regs)); DPRINT("- Input register Eax: %x\n", BiosArguments->Eax); @@ -243,7 +243,7 @@ BiosArguments->Edi = Regs.Edi; BiosArguments->Ebp = Regs.Ebp;
- IntDetachFromCSRSS(&CallingProcess, &PrevAttachedProcess); + IntDetachFromCSRSS(&CallingProcess, &ApcState);
return Status; } _____
Modified: trunk/reactos/drivers/video/videoprt/videoprt.c --- trunk/reactos/drivers/video/videoprt/videoprt.c 2005-06-14 18:39:12 UTC (rev 15914) +++ trunk/reactos/drivers/video/videoprt/videoprt.c 2005-06-14 20:24:02 UTC (rev 15915) @@ -22,7 +22,6 @@
*/
#include "videoprt.h" -#include "internal/ps.h"
/* GLOBAL VARIABLES ***********************************************************/
@@ -495,34 +494,21 @@ }
VOID FASTCALL -IntAttachToCSRSS(PKPROCESS *CallingProcess, PKPROCESS *PrevAttachedProcess) +IntAttachToCSRSS(PKPROCESS *CallingProcess, PKAPC_STATE ApcState) { - *CallingProcess = &PsGetCurrentProcess()->Pcb; + *CallingProcess = (PKPROCESS)PsGetCurrentProcess(); if (*CallingProcess != Csrss) { - if (&PsGetCurrentThread()->ThreadsProcess->Pcb != *CallingProcess) - { - *PrevAttachedProcess = *CallingProcess; - KeDetachProcess(); - } - else - { - *PrevAttachedProcess = NULL; - } - KeAttachProcess(Csrss); + KeStackAttachProcess(Csrss, ApcState); } }
VOID FASTCALL -IntDetachFromCSRSS(PKPROCESS *CallingProcess, PKPROCESS *PrevAttachedProcess) +IntDetachFromCSRSS(PKPROCESS *CallingProcess, PKAPC_STATE ApcState) { if (*CallingProcess != Csrss) { - KeDetachProcess(); - if (NULL != *PrevAttachedProcess) - { - KeAttachProcess(*PrevAttachedProcess); - } + KeUnstackDetachProcess(ApcState); } }
@@ -853,7 +839,7 @@ { static PVOID RomImageBuffer = NULL; PKPROCESS CallingProcess; - PKPROCESS PrevAttachedProcess; + KAPC_STATE ApcState;
DPRINT("VideoPortGetRomImage(HwDeviceExtension 0x%X Length 0x%X)\n", HwDeviceExtension, Length); @@ -890,9 +876,9 @@ return NULL; }
- IntAttachToCSRSS(&CallingProcess, &PrevAttachedProcess); + IntAttachToCSRSS(&CallingProcess, &ApcState); RtlCopyMemory(RomImageBuffer, (PUCHAR)0xC0000, Length); - IntDetachFromCSRSS(&CallingProcess, &PrevAttachedProcess); + IntDetachFromCSRSS(&CallingProcess, &ApcState);
return RomImageBuffer; } _____
Modified: trunk/reactos/drivers/video/videoprt/videoprt.h --- trunk/reactos/drivers/video/videoprt/videoprt.h 2005-06-14 18:39:12 UTC (rev 15914) +++ trunk/reactos/drivers/video/videoprt/videoprt.h 2005-06-14 20:24:02 UTC (rev 15915) @@ -29,6 +29,8 @@
#include <ddk/ntddvdeo.h> #include <ddk/ntapi.h> #include <ddk/ntagp.h> +/* For process attaching functions */ +#include <ddk/ntifs.h> #define NDEBUG #include <debug.h>
@@ -201,10 +203,10 @@ IN PUCHAR FunctionName);
VOID FASTCALL -IntAttachToCSRSS(PKPROCESS *CallingProcess, PKPROCESS *PrevAttachedProcess); +IntAttachToCSRSS(PKPROCESS *CallingProcess, PKAPC_STATE ApcState);
VOID FASTCALL -IntDetachFromCSRSS(PKPROCESS *CallingProcess, PKPROCESS *PrevAttachedProcess); +IntDetachFromCSRSS(PKPROCESS *CallingProcess, PKAPC_STATE ApcState);
NTSTATUS STDCALL IntVideoPortCreateAdapterDeviceObject(