概述
NTSTATUS
HtsReadWriteConfig(
PDEVICE_OBJECT DeviceObject,
ULONG WhichSpace,
PVOID Buffer,
ULONG Offset,
ULONG Length,
BOOLEAN ReadConfig)
{
ASSERT(DeviceObject);
ASSERT(Buffer);
ASSERT(Length);
PIRP Irp = IoAllocateIrp(DeviceObject->StackSize, FALSE);
if (!Irp) {
return STATUS_INSUFFICIENT_RESOURCES;
}
Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;
KEVENT Event;
KeInitializeEvent(&Event, NotificationEvent, FALSE);
IoSetCompletionRoutine(Irp,HtsGenericCompletion,
&Event, TRUE, TRUE, TRUE);
PIO_STACK_LOCATION IoStack = IoGetNextIrpStackLocation(Irp);
IoStack->MajorFunction= IRP_MJ_PNP;
IoStack->MinorFunction= ReadConfig ? IRP_MN_READ_CONFIG : IRP_MN_WRITE_CONFIG;
IoStack->Parameters.ReadWriteConfig.WhichSpace = WhichSpace;
IoStack->Parameters.ReadWriteConfig.Buffer = Buffer;
IoStack->Parameters.ReadWriteConfig.Offset = Offset;
IoStack->Parameters.ReadWriteConfig.Length = Length;
if (ReadConfig) {
RtlZeroMemory(Buffer, Length);
}
NTSTATUS Status = IoCallDriver(DeviceObject, Irp);
if (Status == STATUS_PENDING) {
KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
Status = Irp->IoStatus.Status;
}
IoFreeIrp(Irp);
return Status;
}
NTSTATUS
HtsGenericCompletion (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
)
{
UNREFERENCED_PARAMETER (DeviceObject);
KeSetEvent ((PKEVENT) Context, IO_NO_INCREMENT, FALSE);
return STATUS_MORE_PROCESSING_REQUIRED; // Keep this IRP
}
最后
以上就是犹豫奇异果为你收集整理的Replacing HalGetBusData的全部内容,希望文章能够帮你解决Replacing HalGetBusData所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复