Leaked source code of windows server 2003
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.
|
|
#include "spsim.h"
#include "spsimioct.h"
NTSTATUS SpSimNotifyDeviceIoctl( PSPSIM_EXTENSION SpSim, PIRP Irp, PIO_STACK_LOCATION IrpStack ) { PACPI_EVAL_INPUT_BUFFER_COMPLEX input; PSPSIM_NOTIFY_DEVICE notify; NTSTATUS status; ULONG size;
PAGED_CODE();
if (Irp->AssociatedIrp.SystemBuffer == NULL) { return STATUS_INVALID_PARAMETER; }
if (IrpStack->Parameters.DeviceIoControl.InputBufferLength < sizeof(SPSIM_NOTIFY_DEVICE)) { return STATUS_INVALID_PARAMETER; }
if (SpSim->StaNames == NULL) { return STATUS_INVALID_PARAMETER; }
notify = Irp->AssociatedIrp.SystemBuffer;
if ((notify->Device >= SpSim->StaCount) || (notify->Device > 255)) { return STATUS_INVALID_PARAMETER; }
size = sizeof(ACPI_EVAL_INPUT_BUFFER_COMPLEX) + sizeof(ACPI_METHOD_ARGUMENT) * (2 - ANYSIZE_ARRAY); input = ExAllocatePool(PagedPool, size); if (input == NULL) { return STATUS_INSUFFICIENT_RESOURCES; }
RtlZeroMemory(input, size); input->Signature = ACPI_EVAL_INPUT_BUFFER_COMPLEX_SIGNATURE; input->MethodNameAsUlong = SPSIM_NOTIFY_DEVICE_METHOD; input->Size = size; input->ArgumentCount = 2; input->Argument[0].Type = input->Argument[1].Type = ACPI_METHOD_ARGUMENT_INTEGER; input->Argument[0].DataLength = input->Argument[1].DataLength = sizeof(ULONG); input->Argument[0].Argument = notify->Device; input->Argument[1].Argument = notify->NotifyValue; status = SpSimSendIoctl(SpSim->PhysicalDeviceObject, IOCTL_ACPI_EVAL_METHOD, input, size, NULL, 0 ); ExFreePool(input);
return status; }
|