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

68 lines
1.6 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
physdesc.c
Abstract
Get-friendly-name handling routines
Author:
Ervin P.
Environment:
Kernel mode only
Revision History:
--*/
#include "pch.h"
/*
********************************************************************************
* HidpGetPhysicalDescriptor
********************************************************************************
*
* Note: This function cannot be pageable because it is called
* from the IOCTL dispatch routine, which can get called
* at DISPATCH_LEVEL.
*
*/
NTSTATUS HidpGetPhysicalDescriptor(IN PHIDCLASS_DEVICE_EXTENSION HidDeviceExtension, IN OUT PIRP Irp)
{
FDO_EXTENSION *fdoExt;
NTSTATUS status;
PIO_STACK_LOCATION currentIrpSp, nextIrpSp;
ASSERT(HidDeviceExtension->isClientPdo);
fdoExt = &HidDeviceExtension->pdoExt.deviceFdoExt->fdoExt;
/*
* IOCTL_GET_PHYSICAL_DESCRIPTOR uses buffering method
* METHOD_OUT_DIRECT, meaning that the buffer is in
* the MDL specified by Irp->MdlAddress. We'll just
* pass this down and let the lower driver extract the
* system address.
*/
currentIrpSp = IoGetCurrentIrpStackLocation(Irp);
nextIrpSp = IoGetNextIrpStackLocation(Irp);
nextIrpSp->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;
nextIrpSp->Parameters.DeviceIoControl.IoControlCode = IOCTL_GET_PHYSICAL_DESCRIPTOR;
nextIrpSp->Parameters.DeviceIoControl.OutputBufferLength = currentIrpSp->Parameters.DeviceIoControl.OutputBufferLength;
status = HidpCallDriver(fdoExt->fdo, Irp);
DBGSUCCESS(status, FALSE)
return status;
}