Use KeStackAttachProcess/KeUnstackDetachProcess instead of KeAttachProcess/KeDetachProcess.

svn path=/trunk/; revision=15915
This commit is contained in:
Filip Navara 2005-06-14 20:24:02 +00:00
parent 56f5461bff
commit a6b2363ea0
3 changed files with 32 additions and 44 deletions

View file

@ -36,11 +36,11 @@ IntInt10AllocateBuffer(
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 @@ IntInt10AllocateBuffer(
if (!NT_SUCCESS(Status))
{
DPRINT("- ZwAllocateVirtualMemory failed\n");
IntDetachFromCSRSS(&CallingProcess, &PrevAttachedProcess);
IntDetachFromCSRSS(&CallingProcess, &ApcState);
return ERROR_NOT_ENOUGH_MEMORY;
}
@ -58,7 +58,7 @@ IntInt10AllocateBuffer(
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 @@ IntInt10AllocateBuffer(
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 @@ IntInt10FreeBuffer(
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 @@ IntInt10ReadMemory(
IN ULONG Length)
{
PKPROCESS CallingProcess;
PKPROCESS PrevAttachedProcess;
KAPC_STATE ApcState;
DPRINT("IntInt10ReadMemory\n");
DPRINT("- Segment: %x\n", Seg);
@ -114,9 +114,9 @@ IntInt10ReadMemory(
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 @@ IntInt10WriteMemory(
IN ULONG Length)
{
PKPROCESS CallingProcess;
PKPROCESS PrevAttachedProcess;
KAPC_STATE ApcState;
DPRINT("IntInt10WriteMemory\n");
DPRINT("- Segment: %x\n", Seg);
@ -138,9 +138,9 @@ IntInt10WriteMemory(
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 @@ IntInt10CallBios(
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 @@ IntInt10CallBios(
BiosArguments->SegDs = Regs.Ds;
BiosArguments->SegEs = Regs.Es;
IntDetachFromCSRSS(&CallingProcess, &PrevAttachedProcess);
IntDetachFromCSRSS(&CallingProcess, &ApcState);
return Status;
}
@ -208,7 +208,7 @@ VideoPortInt10(
KV86M_REGISTERS Regs;
NTSTATUS Status;
PKPROCESS CallingProcess;
PKPROCESS PrevAttachedProcess;
KAPC_STATE ApcState;
DPRINT("VideoPortInt10\n");
@ -217,7 +217,7 @@ VideoPortInt10(
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 @@ VideoPortInt10(
BiosArguments->Edi = Regs.Edi;
BiosArguments->Ebp = Regs.Ebp;
IntDetachFromCSRSS(&CallingProcess, &PrevAttachedProcess);
IntDetachFromCSRSS(&CallingProcess, &ApcState);
return Status;
}

View file

@ -22,7 +22,6 @@
*/
#include "videoprt.h"
#include "internal/ps.h"
/* GLOBAL VARIABLES ***********************************************************/
@ -495,34 +494,21 @@ IntVideoPortFindAdapter(
}
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 @@ VideoPortGetRomImage(
{
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 @@ VideoPortGetRomImage(
return NULL;
}
IntAttachToCSRSS(&CallingProcess, &PrevAttachedProcess);
IntAttachToCSRSS(&CallingProcess, &ApcState);
RtlCopyMemory(RomImageBuffer, (PUCHAR)0xC0000, Length);
IntDetachFromCSRSS(&CallingProcess, &PrevAttachedProcess);
IntDetachFromCSRSS(&CallingProcess, &ApcState);
return RomImageBuffer;
}

View file

@ -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 @@ VideoPortGetProcAddress(
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(