windows-nt/Source/XPSP1/NT/drivers/wdm/input/hid1394/hid1394.c

198 lines
4.3 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*
*************************************************************************
* File: HID1394.C
*
* Module: HID1394.SYS
* HID (Human Input Device) minidriver for IEEE 1394 devices.
*
* Copyright (c) 1998 Microsoft Corporation
*
*
* Author: ervinp
*
*************************************************************************
*/
#include <wdm.h>
#include <hidport.h>
#include <1394.h>
#include "hid1394.h"
#include "debug.h"
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING registryPath)
/*++
Routine Description:
Installable driver initialization entry point.
This entry point is called directly by the I/O system.
Arguments:
DriverObject - pointer to the driver object
registryPath - pointer to a unicode string representing the path,
to driver-specific key in the registry.
Return Value:
STATUS_SUCCESS if successful,
STATUS_UNSUCCESSFUL otherwise
--*/
{
NTSTATUS ntStatus = STATUS_SUCCESS;
HID_MINIDRIVER_REGISTRATION hidMinidriverRegistration;
//
// Create dispatch points
//
DriverObject->MajorFunction[IRP_MJ_CREATE] =
DriverObject->MajorFunction[IRP_MJ_CLOSE] = HIDT_CreateClose;
DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = HIDT_InternalIoctl;
DriverObject->MajorFunction[IRP_MJ_PNP] = HIDT_PnP;
DriverObject->MajorFunction[IRP_MJ_POWER] = HIDT_Power;
DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = HIDT_SystemControl;
DriverObject->DriverExtension->AddDevice = HIDT_AddDevice;
DriverObject->DriverUnload = HIDT_Unload;
//
// Register USB layer with HID.SYS module
//
hidMinidriverRegistration.Revision = HID_REVISION;
hidMinidriverRegistration.DriverObject = DriverObject;
hidMinidriverRegistration.RegistryPath = registryPath;
hidMinidriverRegistration.DeviceExtensionSize = sizeof(DEVICE_EXTENSION);
/*
* HIDUSB is a minidriver for USB devices, which do not need to be polled.
*/
hidMinidriverRegistration.DevicesArePolled = FALSE;
ntStatus = HidRegisterMinidriver(&hidMinidriverRegistration);
KeInitializeSpinLock(&resetWorkItemsListSpinLock);
return ntStatus;
}
NTSTATUS HIDT_CreateClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
/*++
Routine Description:
Process the Create and close IRPs sent to this device.
Arguments:
DeviceObject - pointer to a device object.
Irp - pointer to an I/O Request Packet.
Return Value:
NT status code
--*/
{
PIO_STACK_LOCATION IrpStack;
NTSTATUS ntStatus = STATUS_SUCCESS;
DBGBREAK;
//
// Get a pointer to the current location in the Irp.
//
IrpStack = IoGetCurrentIrpStackLocation(Irp);
switch(IrpStack->MajorFunction)
{
case IRP_MJ_CREATE:
Irp->IoStatus.Information = 0;
break;
case IRP_MJ_CLOSE:
Irp->IoStatus.Information = 0;
break;
default:
ntStatus = STATUS_INVALID_PARAMETER;
break;
}
//
// Save Status for return and complete Irp
//
Irp->IoStatus.Status = ntStatus;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return ntStatus;
}
NTSTATUS HIDT_AddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT FunctionalDeviceObject)
/*++
Routine Description:
Process the IRPs sent to this device.
Arguments:
DeviceObject - pointer to a device object.
PhysicalDeviceObject - pointer to a device object pointer created by the bus
Return Value:
NT status code.
--*/
{
NTSTATUS ntStatus = STATUS_SUCCESS;
PDEVICE_OBJECT DeviceObject = NULL;
PDEVICE_EXTENSION deviceExtension;
DeviceObject = FunctionalDeviceObject;
deviceExtension = GET_MINIDRIVER_DEVICE_EXTENSION( DeviceObject );
deviceExtension->DeviceFlags = 0;
deviceExtension->ResetWorkItem = NULL;
return ntStatus;
}
VOID HIDT_Unload(IN PDRIVER_OBJECT DriverObject)
/*++
Routine Description:
Free all the allocated resources, etc.
Arguments:
DriverObject - pointer to a driver object.
Return Value:
VOID.
--*/
{
ASSERT (!DriverObject->DeviceObject);
}