📄 serialp.h
字号:
BOOLEAN
SerialBitMappedMultiportIsr(
IN PKINTERRUPT InterruptObject,
IN PVOID Context
);
VOID
SerialPutChar(
IN PSERIAL_DEVICE_EXTENSION Extension,
IN UCHAR CharToPut
);
BOOLEAN
SerialGetStats(
IN PVOID Context
);
BOOLEAN
SerialClearStats(
IN PVOID Context
);
NTSTATUS
SerialCloseComplete(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
);
NTSTATUS
SerialPnpDispatch(IN PDEVICE_OBJECT PDevObj, IN PIRP PIrp);
NTSTATUS
SerialPowerDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SerialSetPowerD0(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SerialSetPowerD3(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SerialOpenClose(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SerialGetConfigDefaults(
IN PSERIAL_FIRMWARE_DATA DriverDefaultsPtr,
IN PUNICODE_STRING RegistryPath
);
VOID
SerialGetProperties(
IN PSERIAL_DEVICE_EXTENSION Extension,
IN PSERIAL_COMMPROP Properties
);
NTSTATUS
SerialEnumerateLegacy(IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath,
IN PSERIAL_FIRMWARE_DATA DriverDefaultsPtr);
NTSTATUS
SerialMigrateLegacyRegistry(IN PDEVICE_OBJECT PPdo,
IN PSERIAL_USER_DATA PUserData,
IN BOOLEAN IsMulti);
NTSTATUS
SerialBuildResourceList(OUT PCM_RESOURCE_LIST PResourceList,
OUT PULONG PPartialCount,
IN PSERIAL_USER_DATA PUserData);
NTSTATUS
SerialTranslateResourceList(IN PDRIVER_OBJECT DriverObject,
IN PKEY_BASIC_INFORMATION UserSubKey,
OUT PCM_RESOURCE_LIST PTrResourceList,
IN PCM_RESOURCE_LIST PResourceList,
IN ULONG PartialCount,
IN PSERIAL_USER_DATA PUserData);
NTSTATUS
SerialBuildRequirementsList(OUT PIO_RESOURCE_REQUIREMENTS_LIST PRequiredList,
IN ULONG PartialCount,
IN PSERIAL_USER_DATA PUserData);
BOOLEAN
SerialIsUserDataValid(IN PDRIVER_OBJECT DriverObject,
IN PKEY_BASIC_INFORMATION UserSubKey,
IN PRTL_QUERY_REGISTRY_TABLE Parameters,
IN ULONG DefaultInterfaceType,
IN PSERIAL_USER_DATA PUserData);
NTSTATUS
SerialControllerCallBack(
IN PVOID Context,
IN PUNICODE_STRING PathName,
IN INTERFACE_TYPE BusType,
IN ULONG BusNumber,
IN PKEY_VALUE_FULL_INFORMATION *BusInformation,
IN CONFIGURATION_TYPE ControllerType,
IN ULONG ControllerNumber,
IN PKEY_VALUE_FULL_INFORMATION *ControllerInformation,
IN CONFIGURATION_TYPE PeripheralType,
IN ULONG PeripheralNumber,
IN PKEY_VALUE_FULL_INFORMATION *PeripheralInformation
);
VOID
SerialLogError(
IN PDRIVER_OBJECT DriverObject,
IN PDEVICE_OBJECT DeviceObject OPTIONAL,
IN PHYSICAL_ADDRESS P1,
IN PHYSICAL_ADDRESS P2,
IN ULONG SequenceNumber,
IN UCHAR MajorFunctionCode,
IN UCHAR RetryCount,
IN ULONG UniqueErrorValue,
IN NTSTATUS FinalStatus,
IN NTSTATUS SpecificIOStatus,
IN ULONG LengthOfInsert1,
IN PWCHAR Insert1,
IN ULONG LengthOfInsert2,
IN PWCHAR Insert2
);
NTSTATUS
SerialAddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PLowerDevObj);
NTSTATUS
SerialCreateDevObj(IN PDRIVER_OBJECT DriverObject,
OUT PDEVICE_OBJECT *NewDeviceObject);
NTSTATUS
SerialStartDevice(IN PDEVICE_OBJECT PDevObj, IN PIRP PIrp);
NTSTATUS
SerialGetRegistryKeyValue (IN HANDLE Handle, IN PWCHAR KeyNameString,
IN ULONG KeyNameStringLength, IN PVOID Data,
IN ULONG DataLength);
NTSTATUS
SerialPnpDispatch(IN PDEVICE_OBJECT PDevObj, IN PIRP PIrp);
NTSTATUS
SerialGetPortInfo(IN PDEVICE_OBJECT PDevObj, IN PCM_RESOURCE_LIST PResList,
IN PCM_RESOURCE_LIST PTrResList, OUT PCONFIG_DATA PConfig,
IN PSERIAL_USER_DATA PUserData);
NTSTATUS
SerialFinishStartDevice(IN PDEVICE_OBJECT PDevObj,
IN PCM_RESOURCE_LIST PResList,
IN PCM_RESOURCE_LIST PTrResList,
IN PSERIAL_USER_DATA PUserData);
NTSTATUS
SerialPutRegistryKeyValue (
IN HANDLE Handle,
IN PWCHAR KeyNameString,
IN ULONG KeyNameStringLength,
IN ULONG Dtype,
IN PVOID Data,
IN ULONG DataLength
);
NTSTATUS
SerialInitController(IN PDEVICE_OBJECT PDevObj, IN PCONFIG_DATA PConfigData);
NTSTATUS
SerialInitMultiPort(IN PSERIAL_DEVICE_EXTENSION PDevExt,
IN PCONFIG_DATA PConfigData, IN PDEVICE_OBJECT PDevObj);
NTSTATUS
SerialFindInitController(IN PDEVICE_OBJECT PDevObj, IN PCONFIG_DATA PConfig);
BOOLEAN
SerialCIsrSw(IN PKINTERRUPT InterruptObject, IN PVOID Context);
NTSTATUS
SerialDoExternalNaming(IN PSERIAL_DEVICE_EXTENSION PDevExt,
IN PDRIVER_OBJECT PDrvObj);
PVOID
SerialGetMappedAddress(
IN INTERFACE_TYPE BusType,
IN ULONG BusNumber,
PHYSICAL_ADDRESS IoAddress,
ULONG NumberOfBytes,
ULONG AddressSpace,
PBOOLEAN MappedAddress
);
NTSTATUS
SerialItemCallBack(
IN PVOID Context,
IN PUNICODE_STRING PathName,
IN INTERFACE_TYPE BusType,
IN ULONG BusNumber,
IN PKEY_VALUE_FULL_INFORMATION *BusInformation,
IN CONFIGURATION_TYPE ControllerType,
IN ULONG ControllerNumber,
IN PKEY_VALUE_FULL_INFORMATION *ControllerInformation,
IN CONFIGURATION_TYPE PeripheralType,
IN ULONG PeripheralNumber,
IN PKEY_VALUE_FULL_INFORMATION *PeripheralInformation
);
BOOLEAN
SerialDoesPortExist(
IN PSERIAL_DEVICE_EXTENSION Extension,
PUNICODE_STRING InsertString,
IN ULONG ForceFifo,
IN ULONG LogFifo
);
SERIAL_MEM_COMPARES
SerialMemCompare(
IN PHYSICAL_ADDRESS A,
IN ULONG SpanOfA,
IN PHYSICAL_ADDRESS B,
IN ULONG SpanOfB
);
VOID
SerialUndoExternalNaming(
IN PSERIAL_DEVICE_EXTENSION Extension
);
NTSTATUS
SerialIRPPrologue(IN PIRP PIrp, IN PSERIAL_DEVICE_EXTENSION PDevExt);
VOID
SerialIRPEpilogue(IN PSERIAL_DEVICE_EXTENSION PDevExt);
NTSTATUS
SerialIoCallDriver(PSERIAL_DEVICE_EXTENSION PDevExt, PDEVICE_OBJECT PDevObj,
PIRP PIrp);
NTSTATUS
SerialPoCallDriver(PSERIAL_DEVICE_EXTENSION PDevExt, PDEVICE_OBJECT PDevObj,
PIRP PIrp);
NTSTATUS
SerialRemoveDevObj(IN PDEVICE_OBJECT PDevObj);
VOID
SerialReleaseResources(IN PSERIAL_DEVICE_EXTENSION PDevExt);
VOID
SerialKillPendingIrps(PDEVICE_OBJECT DeviceObject);
VOID
SerialDisableUART(IN PVOID Context);
VOID
SerialDrainUART(IN PSERIAL_DEVICE_EXTENSION PDevExt,
IN PLARGE_INTEGER PDrainTime);
NTSTATUS
SerialSystemControlDispatch(IN PDEVICE_OBJECT PDevObj, IN PIRP PIrp);
NTSTATUS
SerialSetWmiDataItem(IN PDEVICE_OBJECT PDevObj, IN PIRP PIrp,
IN ULONG GuidIndex, IN ULONG InstanceIndex,
IN ULONG DataItemId,
IN ULONG BufferSize, IN PUCHAR PBuffer);
NTSTATUS
SerialSetWmiDataBlock(IN PDEVICE_OBJECT PDevObj, IN PIRP PIrp,
IN ULONG GuidIndex, IN ULONG InstanceIndex,
IN ULONG BufferSize,
IN PUCHAR PBuffer);
NTSTATUS
SerialQueryWmiDataBlock(IN PDEVICE_OBJECT PDevObj, IN PIRP PIrp,
IN ULONG GuidIndex,
IN ULONG InstanceIndex,
IN ULONG InstanceCount,
IN OUT PULONG InstanceLengthArray,
IN ULONG OutBufferSize,
OUT PUCHAR PBuffer);
NTSTATUS
SerialQueryWmiRegInfo(IN PDEVICE_OBJECT PDevObj, OUT PULONG PRegFlags,
OUT PUNICODE_STRING PInstanceName,
OUT PUNICODE_STRING *PRegistryPath,
OUT PUNICODE_STRING MofResourceName,
OUT PDEVICE_OBJECT *Pdo);
VOID
SerialRestoreDeviceState(IN PSERIAL_DEVICE_EXTENSION PDevExt);
VOID
SerialSaveDeviceState(IN PSERIAL_DEVICE_EXTENSION PDevExt);
NTSTATUS
SerialSyncCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp,
IN PKEVENT SerialSyncEvent);
NTSTATUS
SerialGotoPowerState(IN PDEVICE_OBJECT PDevObj,
IN PSERIAL_DEVICE_EXTENSION PDevExt,
IN DEVICE_POWER_STATE DevPowerState);
NTSTATUS
SerialFilterIrps(IN PIRP PIrp, IN PSERIAL_DEVICE_EXTENSION PDevExt);
VOID
SerialKillAllStalled(IN PDEVICE_OBJECT PDevObj);
VOID
SerialUnstallIrps(IN PSERIAL_DEVICE_EXTENSION PDevExt);
NTSTATUS
SerialInternalIoControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS
SerialSendWaitWake(PSERIAL_DEVICE_EXTENSION PDevExt);
NTSTATUS
SerialWakeCompletion(IN PDEVICE_OBJECT PDevObj, IN UCHAR MinorFunction,
IN POWER_STATE PowerState, IN PVOID Context,
IN PIO_STATUS_BLOCK IoStatus);
UINT32
SerialReportMaxBaudRate(ULONG Bauds);
BOOLEAN
SerialSetMCRContents(IN PVOID Context);
BOOLEAN
SerialGetMCRContents(IN PVOID Context);
BOOLEAN
SerialSetFCRContents(IN PVOID Context);
NTSTATUS
SerialTossWMIRequest(IN PDEVICE_OBJECT PDevObj, IN PIRP PIrp,
IN ULONG GuidIndex);
VOID
SerialDpcEpilogue(IN PSERIAL_DEVICE_EXTENSION PDevExt, IN PKDPC PDpc);
BOOLEAN
SerialInsertQueueDpc(IN PRKDPC Dpc, IN PVOID Sarg1, IN PVOID Sarg2,
IN PSERIAL_DEVICE_EXTENSION PDevExt);
BOOLEAN
SerialSetTimer(IN PKTIMER Timer, IN LARGE_INTEGER DueTime,
IN PKDPC Dpc OPTIONAL, IN PSERIAL_DEVICE_EXTENSION PDevExt);
BOOLEAN
SerialCancelTimer(IN PKTIMER Timer, IN PSERIAL_DEVICE_EXTENSION PDevExt);
VOID
SerialUnlockPages(IN PKDPC PDpc, IN PVOID PDeferredContext,
IN PVOID PSysContext1, IN PVOID PSysContext2);
VOID
SerialMarkHardwareBroken(IN PSERIAL_DEVICE_EXTENSION PDevExt);
VOID
SerialDisableInterfacesResources(IN PDEVICE_OBJECT PDevObj,
IN BOOLEAN DisableUART);
VOID
SerialSetDeviceFlags(IN PSERIAL_DEVICE_EXTENSION PDevExt, OUT PULONG PFlags,
IN ULONG Value, IN BOOLEAN Set);
typedef struct _SERIAL_UPDATE_CHAR {
PSERIAL_DEVICE_EXTENSION Extension;
ULONG CharsCopied;
BOOLEAN Completed;
} SERIAL_UPDATE_CHAR,*PSERIAL_UPDATE_CHAR;
//
// The following simple structure is used to send a pointer
// the device extension and an ioctl specific pointer
// to data.
//
typedef struct _SERIAL_IOCTL_SYNC {
PSERIAL_DEVICE_EXTENSION Extension;
PVOID Data;
} SERIAL_IOCTL_SYNC,*PSERIAL_IOCTL_SYNC;
#define SerialSetFlags(PDevExt, Value) \
SerialSetDeviceFlags((PDevExt), &(PDevExt)->Flags, (Value), TRUE)
#define SerialClearFlags(PDevExt, Value) \
SerialSetDeviceFlags((PDevExt), &(PDevExt)->Flags, (Value), FALSE)
#define SerialSetAccept(PDevExt, Value) \
SerialSetDeviceFlags((PDevExt), &(PDevExt)->DevicePNPAccept, (Value), TRUE)
#define SerialClearAccept(PDevExt, Value) \
SerialSetDeviceFlags((PDevExt), &(PDevExt)->DevicePNPAccept, (Value), FALSE)
//
// The following three macros are used to initialize, set
// and clear references in IRPs that are used by
// this driver. The reference is stored in the fourth
// argument of the irp, which is never used by any operation
// accepted by this driver.
//
#define SERIAL_REF_ISR (0x00000001)
#define SERIAL_REF_CANCEL (0x00000002)
#define SERIAL_REF_TOTAL_TIMER (0x00000004)
#define SERIAL_REF_INT_TIMER (0x00000008)
#define SERIAL_REF_XOFF_REF (0x00000010)
#define SERIAL_INIT_REFERENCE(Irp) { \
ASSERT(sizeof(ULONG_PTR) <= sizeof(PVOID)); \
IoGetCurrentIrpStackLocation((Irp))->Parameters.Others.Argument4 = NULL; \
}
#define SERIAL_SET_REFERENCE(Irp,RefType) \
do { \
LONG _refType = (RefType); \
PULONG_PTR _arg4 = (PVOID)&IoGetCurrentIrpStackLocation((Irp))->Parameters.Others.Argument4; \
ASSERT(!(*_arg4 & _refType)); \
*_arg4 |= _refType; \
} while (0)
#define SERIAL_CLEAR_REFERENCE(Irp,RefType) \
do { \
LONG _refType = (RefType); \
PULONG_PTR _arg4 = (PVOID)&IoGetCurrentIrpStackLocation((Irp))->Parameters.Others.Argument4; \
ASSERT(*_arg4 & _refType); \
*_arg4 &= ~_refType; \
} while (0)
#define SERIAL_REFERENCE_COUNT(Irp) \
((ULONG_PTR)((IoGetCurrentIrpStackLocation((Irp))->Parameters.Others.Argument4)))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -