Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

79 lines
1.7 KiB

/*++
Copyright (c) 1991 Microsoft Corporation
Module Name:
ixinfo.c
Abstract:
Author:
Ken Reneris (kenr) 08-Aug-1994
Environment:
Kernel mode only.
Revision History:
--*/
#include "halp.h"
#include "pcmp_nt.inc"
extern ULONG HalpPerfInterruptHandler;
static HANDLE HalpProcessId = NULL;
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE,HalpSetSystemInformation)
#endif
NTSTATUS
HalpSetSystemInformation (
IN HAL_SET_INFORMATION_CLASS InformationClass,
IN ULONG BufferSize,
IN PVOID Buffer
)
{
PAGED_CODE();
switch (InformationClass) {
case HalProfileSourceInterruptHandler:
//
// Set ISR handler for PerfVector
//
if (!(HalpFeatureBits & HAL_PERF_EVENTS)) {
return STATUS_UNSUCCESSFUL;
}
//
// Accept the interrupt handler if no other process
// has already hooked the interrupt or if we are in
// the context of the process that already hooked it.
//
if (HalpProcessId == NULL) {
HalpPerfInterruptHandler = *((PULONG) Buffer);
if (HalpPerfInterruptHandler != 0) {
HalpProcessId = PsGetCurrentProcessId();
}
} else if (HalpProcessId == PsGetCurrentProcessId()) {
HalpPerfInterruptHandler = *((PULONG) Buffer);
if (HalpPerfInterruptHandler == 0) {
HalpProcessId = NULL;
}
} else {
return STATUS_UNSUCCESSFUL;
}
return STATUS_SUCCESS;
}
return HaliSetSystemInformation (InformationClass, BufferSize, Buffer);
}