mirror of
https://github.com/reactos/reactos.git
synced 2025-07-24 15:53:49 +00:00
Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers into modules, and delete rossubsys.
This commit is contained in:
parent
b94e2d8ca0
commit
c2c66aff7d
24198 changed files with 0 additions and 37285 deletions
177
modules/rosapps/applications/sysutils/utils/pice/module/hooks.c
Normal file
177
modules/rosapps/applications/sysutils/utils/pice/module/hooks.c
Normal file
|
@ -0,0 +1,177 @@
|
|||
/*++
|
||||
|
||||
Copyright (c) 1998-2001 Klaus P. Gerlicher
|
||||
|
||||
Module Name:
|
||||
|
||||
hooks.c
|
||||
|
||||
Abstract:
|
||||
|
||||
hooking of interrupts
|
||||
|
||||
Environment:
|
||||
|
||||
Kernel mode only
|
||||
|
||||
Author:
|
||||
|
||||
Klaus P. Gerlicher
|
||||
|
||||
Revision History:
|
||||
|
||||
16-Jul-1998: created
|
||||
15-Nov-2000: general cleanup of source files
|
||||
|
||||
Copyright notice:
|
||||
|
||||
This file may be distributed under the terms of the GNU Public License.
|
||||
|
||||
--*/
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// INCLUDES
|
||||
////
|
||||
#include "remods.h"
|
||||
#include "precomp.h"
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// PROTOTYPES
|
||||
////
|
||||
void DeinstallHooks(void);
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// DEFINES
|
||||
////
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// GLOBALS
|
||||
////
|
||||
|
||||
// IDT entries
|
||||
//PIDTENTRY pidt[256];
|
||||
IDTENTRY oldidt[256]={{0},};
|
||||
|
||||
IDTENTRY idt_snapshot[256]={{0},};
|
||||
|
||||
// processor flag for interrupt suspension
|
||||
ULONG ulOldFlags;
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
// PROCEDURES
|
||||
////
|
||||
|
||||
//*************************************************************************
|
||||
// MaskIrqs()
|
||||
//
|
||||
//*************************************************************************
|
||||
void MaskIrqs(void)
|
||||
{
|
||||
ENTER_FUNC();
|
||||
|
||||
save_flags(ulOldFlags);
|
||||
cli();
|
||||
|
||||
LEAVE_FUNC();
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
// UnmaskIrqs()
|
||||
//
|
||||
//*************************************************************************
|
||||
void UnmaskIrqs(void)
|
||||
{
|
||||
ENTER_FUNC();
|
||||
|
||||
restore_flags(ulOldFlags);
|
||||
|
||||
LEAVE_FUNC();
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
// SetGlobalInt()
|
||||
//
|
||||
//*************************************************************************
|
||||
ULONG SetGlobalInt(ULONG dwInt,ULONG NewIntHandler)
|
||||
{
|
||||
ULONG idt[2];
|
||||
ULONG OldIntHandler;
|
||||
struct IdtEntry* pidt;
|
||||
struct IdtEntry oldidt;
|
||||
|
||||
ENTER_FUNC();
|
||||
|
||||
// get linear location of IDT
|
||||
__asm__("sidt %0":"=m" (idt));
|
||||
|
||||
// get pointer to idte for int 3
|
||||
pidt=((struct IdtEntry*)((idt[1]<<16)|((idt[0]>>16)&0x0000FFFF)))+dwInt;
|
||||
|
||||
oldidt=*pidt;
|
||||
|
||||
// set new handler address
|
||||
pidt->HiOffset=(USHORT)(((ULONG)NewIntHandler)>>16);
|
||||
pidt->LoOffset=(USHORT)(((ULONG)NewIntHandler)&0x0000FFFF);
|
||||
|
||||
DPRINT((0,"new INT(%0.2x) handler = %0.4x:%x\n",dwInt,pidt->SegSel,(pidt->HiOffset<<16)|(pidt->LoOffset&0x0000FFFF)));
|
||||
|
||||
OldIntHandler=(oldidt.HiOffset<<16)|(oldidt.LoOffset&0x0000FFFF);
|
||||
|
||||
DPRINT((0,"old INT(%0.2x) handler = %0.4x:%x\n",dwInt,pidt->SegSel,OldIntHandler));
|
||||
|
||||
LEAVE_FUNC();
|
||||
|
||||
return OldIntHandler;
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
// TakeIdtSnapshot()
|
||||
//
|
||||
//*************************************************************************
|
||||
void TakeIdtSnapshot(void)
|
||||
{
|
||||
ULONG idt[2],i;
|
||||
struct IdtEntry* pidt;
|
||||
|
||||
__asm__("sidt %0":"=m" (idt));
|
||||
|
||||
// get pointer to idte for int 3
|
||||
pidt=((struct IdtEntry*)((idt[1]<<16)|((idt[0]>>16)&0x0000FFFF)));
|
||||
|
||||
for(i=0;i<256;i++)
|
||||
{
|
||||
DPRINT((11,"TakeIdtSnapShot(): saving vector %u\n",i));
|
||||
if(IsRangeValid((ULONG)pidt,sizeof(*pidt)) )
|
||||
{
|
||||
DPRINT((11,"TakeIdtSnapShot(): vector %u valid\n",i));
|
||||
idt_snapshot[i] = *pidt++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
// RestoreIdt()
|
||||
//
|
||||
//*************************************************************************
|
||||
void RestoreIdt(void)
|
||||
{
|
||||
ULONG idt[2],i;
|
||||
struct IdtEntry* pidt;
|
||||
|
||||
__asm__("sidt %0":"=m" (idt));
|
||||
|
||||
// get pointer to idte for int 3
|
||||
pidt=((struct IdtEntry*)((idt[1]<<16)|((idt[0]>>16)&0x0000FFFF)));
|
||||
|
||||
for(i=0;i<256;i++)
|
||||
{
|
||||
DPRINT((11,"TakeIdtSnapShot(): restoring vector %u\n",i));
|
||||
if(IsRangeValid((ULONG)pidt,sizeof(*pidt)) )
|
||||
{
|
||||
DPRINT((11,"TakeIdtSnapShot(): vector %u valid\n",i));
|
||||
*pidt++ = idt_snapshot[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// EOF
|
Loading…
Add table
Add a link
Reference in a new issue