⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1394vdev.c

📁 1394 驱动程序源代码,有兴趣的朋友可以看看
💻 C
字号:
/*++

Copyright (c) 1998 Microsoft Corporation

Module Name:

    1394vdev.c
--*/

#define _1394VDEV_C
#include "pch.h"
#undef _1394VDEV_C

#if DBG

unsigned char t1394VDevDebugLevel = TL_WARNING;

#endif

NTSTATUS
DriverEntry(
    IN PDRIVER_OBJECT   DriverObject,
    IN PUNICODE_STRING  RegistryPath
    )
{
    NTSTATUS    ntStatus = STATUS_SUCCESS;

    ENTER("DriverEntry");

    DriverObject->MajorFunction[IRP_MJ_CREATE]          = t1394VDev_Create;
    DriverObject->MajorFunction[IRP_MJ_CLOSE]           = t1394VDev_Close;
    DriverObject->MajorFunction[IRP_MJ_PNP]             = t1394VDev_Pnp;
    DriverObject->MajorFunction[IRP_MJ_POWER]           = t1394VDev_Power;
    DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]  = t1394VDev_IoControl;
    DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL]  = t1394VDev_IoControl;
    DriverObject->DriverUnload                          = t1394VDev_Unload;
    DriverObject->DriverExtension->AddDevice            = t1394VDev_PnpAddDevice;

    EXIT("DriverEntry", ntStatus);
    return(ntStatus);
} // DriverEntry

NTSTATUS
t1394VDev_Create(
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp
    )
{
    NTSTATUS    ntStatus = STATUS_SUCCESS;

    ENTER("t1394VDev_Create");

    Irp->IoStatus.Status = STATUS_SUCCESS;
    IoCompleteRequest(Irp, IO_NO_INCREMENT);

    EXIT("t1394VDev_Create", ntStatus);
    return(ntStatus);
} // t1394VDev_Create

NTSTATUS
t1394VDev_Close(
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp
    )
{
    NTSTATUS    ntStatus = STATUS_SUCCESS;

    ENTER("t1394VDev_Close");

    Irp->IoStatus.Status = STATUS_SUCCESS;
    IoCompleteRequest(Irp, IO_NO_INCREMENT);

    EXIT("t1394VDev_Close", ntStatus);
    return(ntStatus);
} // t1394VDev_Close


void
t1394VDev_Unload(
    IN PDRIVER_OBJECT DriverObject
    )
{
    TRACE(TL_TRACE, ("UNLOAD 1394VDEV.SYS"));
} // t1394VDev_Unload

void
t1394VDev_CancelIrp(
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp
    )
{
    KIRQL               Irql;
    PBUS_RESET_IRP      BusResetIrp;
    PDEVICE_EXTENSION   deviceExtension;

    ENTER("t1394VDev_CancelIrp");

    deviceExtension = DeviceObject->DeviceExtension;

    KeAcquireSpinLock(&deviceExtension->ResetSpinLock, &Irql);

    BusResetIrp = (PBUS_RESET_IRP) deviceExtension->BusResetIrps.Flink;

    TRACE(TL_TRACE, ("Irp = 0x%p\n", Irp));

    while (BusResetIrp) {

        TRACE(TL_TRACE, ("Cancelling BusResetIrp->Irp = 0x%p\n", BusResetIrp->Irp));

        if (BusResetIrp->Irp == Irp) {

            RemoveEntryList(&BusResetIrp->BusResetIrpList);
            ExFreePool(BusResetIrp);
	     BusResetIrp = NULL;		
            break;
        }
        else if (BusResetIrp->BusResetIrpList.Flink == &deviceExtension->BusResetIrps) {
            break;
        }
        else
            BusResetIrp = (PBUS_RESET_IRP)BusResetIrp->BusResetIrpList.Flink;
    }

    KeReleaseSpinLock(&deviceExtension->ResetSpinLock, Irql);

    IoReleaseCancelSpinLock(Irp->CancelIrql);

    Irp->IoStatus.Status = STATUS_CANCELLED;
    IoCompleteRequest(Irp, IO_NO_INCREMENT);

    EXIT("t1394VDev_CancelIrp", STATUS_SUCCESS);
} // t1394VDev_CancelIrp

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -