📄 serenum.h
字号:
PDEVICE_OBJECT UnderlyingPDO;
PDEVICE_OBJECT TopOfStack;
// the underlying bus PDO and the actual device object to which our
// FDO is attached
KEVENT CallEvent;
// An event on which to wait for IRPs sent to the lower device objects
// to complete.
ULONG OutstandingIO;
// the number of IRPs sent from the bus to the underlying device object
KEVENT RemoveEvent;
// On remove device plugplay request we must wait until all outstanding
// requests have been completed before we can actually delete the device
// object.
UNICODE_STRING DevClassAssocName;
// The name returned from IoRegisterDeviceClass Association,
// which is used as a handle for IoSetDev... and friends.
PHYSICAL_ADDRESS PhysicalAddress;
PSERENUM_READPORT ReadPort;
PSERENUM_WRITEPORT WritePort;
PVOID SerenumPortAddress;
SYSTEM_POWER_STATE SystemWake;
DEVICE_POWER_STATE DeviceWake;
struct {
ULONG Level;
ULONG Vector;
ULONG Affinity;
} Interrupt;
} FDO_DEVICE_DATA, *PFDO_DEVICE_DATA;
//
// Prototypes
//
NTSTATUS
Serenum_CreateClose (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
Serenum_IoCtl (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
Serenum_InternIoCtl (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
VOID
Serenum_DriverUnload (
IN PDRIVER_OBJECT DriverObject
);
NTSTATUS
Serenum_PnP (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
Serenum_Power (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
Serenum_AddDevice(
IN PDRIVER_OBJECT DriverObject,
IN PDEVICE_OBJECT BusDeviceObject
);
NTSTATUS
Serenum_PnPRemove (
PDEVICE_OBJECT Device,
PPDO_DEVICE_DATA PdoData
);
NTSTATUS
Serenum_ListPorts (
PSERENUM_PORT_DESC Desc,
PFDO_DEVICE_DATA DeviceData
);
NTSTATUS
Serenum_PortParameters (
PSERENUM_PORT_PARAMETERS Parameters,
PPDO_DEVICE_DATA PdoDeviceData
);
NTSTATUS
Serenum_FDO_PnP (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PIO_STACK_LOCATION IrpStack,
IN PFDO_DEVICE_DATA DeviceData
);
NTSTATUS
Serenum_PDO_PnP (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PIO_STACK_LOCATION IrpStack,
IN PPDO_DEVICE_DATA DeviceData
);
NTSTATUS
Serenum_IncIoCount (
PFDO_DEVICE_DATA Data
);
VOID
Serenum_DecIoCount (
PFDO_DEVICE_DATA Data
);
NTSTATUS
Serenum_FDO_Power (
PFDO_DEVICE_DATA FdoData,
PIRP Irp
);
NTSTATUS
Serenum_PDO_Power (
PPDO_DEVICE_DATA FdoData,
PIRP Irp
);
NTSTATUS
Serenum_DispatchPassThrough(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
Serenum_ReenumerateDevices(
IN PIRP Irp,
IN PFDO_DEVICE_DATA DeviceData
);
NTSTATUS
Serenum_EnumComplete (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
);
NTSTATUS
Serenum_InitMultiString(PFDO_DEVICE_DATA FdoData, PUNICODE_STRING MultiString,
...);
int Serenum_GetDevOtherID(
PCHAR input,
PCHAR output
);
NTSTATUS
Serenum_GetDevPnPRev(
PFDO_DEVICE_DATA FdoData,
PCHAR input,
PCHAR output,
int *start) ;
void Serenum_GetDevName(
PCHAR input,
PCHAR output,
int *start);
void Serenum_GetDevSerialNo(
PCHAR input,
PCHAR output,
int *start);
void Serenum_GetDevClass(
PCHAR input,
PCHAR output,
int *start);
void Serenum_GetDevCompId(
PCHAR input,
PCHAR output,
int *start);
void Serenum_GetDevDesc(
PCHAR input,
PCHAR output,
int *start);
NTSTATUS
Serenum_ParseData(PFDO_DEVICE_DATA FdoData, PCHAR ReadBuffer, ULONG BufferLen,
PUNICODE_STRING hardwareIDs, PUNICODE_STRING compIDs,
PUNICODE_STRING deviceIDs, PUNICODE_STRING PDeviceDesc);
NTSTATUS
Serenum_ReadSerialPort(OUT PCHAR PReadBuffer, IN USHORT Buflen,
IN ULONG Timeout, OUT PUSHORT nActual,
OUT PIO_STATUS_BLOCK IoStatusBlock,
IN const PFDO_DEVICE_DATA FdoData);
NTSTATUS
Serenum_Wait (
IN PKTIMER Timer,
IN LARGE_INTEGER DueTime );
#define Serenum_IoSyncIoctl(Ioctl, Internal, PDevObj, PEvent, PIoStatusBlock) \
Serenum_IoSyncIoctlEx((Ioctl), (Internal), (PDevObj), (PEvent), \
(PIoStatusBlock), NULL, 0, NULL, 0)
NTSTATUS
Serenum_IoSyncIoctlEx(ULONG Ioctl, BOOLEAN Internal, PDEVICE_OBJECT PDevObj,
PKEVENT PEvent, PIO_STATUS_BLOCK PIoStatusBlock,
PVOID PInBuffer, ULONG InBufferLen, PVOID POutBuffer,
ULONG OutBufferLen);
NTSTATUS
Serenum_IoSyncReqWithIrp(
PIRP Irp,
UCHAR MajorFunction,
PKEVENT event,
PDEVICE_OBJECT devobj );
NTSTATUS
Serenum_IoSyncReq(
PDEVICE_OBJECT Target,
IN PIRP Irp,
PKEVENT event
);
NTSTATUS
Serenum_CopyUniString (
PUNICODE_STRING source,
PUNICODE_STRING dest);
void
Serenum_FixptToAscii(
int n,
PCHAR output);
int
Serenum_HToI(char c);
int
Serenum_SzCopy (
PCHAR source,
PCHAR dest);
void
Serenum_PDO_EnumMarkMissing(
PFDO_DEVICE_DATA FdoData,
PPDO_DEVICE_DATA PdoData);
int
Serenum_StrLen (
PCHAR string);
void
Serenum_PollingTimerRoutine (
IN PKDPC Dpc,
IN PFDO_DEVICE_DATA FdoData,
IN PVOID SystemArgument1,
IN PVOID SystemArgument2);
void
Serenum_PollingRoutine (PDEVICE_OBJECT PDevObj, PFDO_DEVICE_DATA FdoData);
void
Serenum_StartPolling(
PFDO_DEVICE_DATA FdoData,
BOOLEAN Lock);
void
Serenum_StopPolling (
PFDO_DEVICE_DATA FdoData,
BOOLEAN Lock);
NTSTATUS
Serenum_GetRegistryKeyValue (
IN HANDLE Handle,
IN PWCHAR KeyNameString,
IN ULONG KeyNameStringLength,
IN PVOID Data,
IN ULONG DataLength,
OUT PULONG ActualLength);
void
Serenum_InitPDO (
PDEVICE_OBJECT pdoData,
PFDO_DEVICE_DATA fdoData
);
void
SerenumScanOtherIdForMouse(IN PCHAR PBuffer, IN ULONG BufLen,
OUT PCHAR *PpMouseId);
#endif // ndef SERENUM_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -