📄 1394diag.h
字号:
/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
1394diag.h
Abstract:
Author:
Peter Binder (pbinder) 4/13/98
Revision History:
Date Who What
-------- --------- ------------------------------------------------------------
4/13/98 pbinder taken from original 1394diag...
--*/
#include <basetyps.h>
#define MAX_SUFFIX_SIZE 4*sizeof(WCHAR)
#define T1394DIAG_DEVICE_NAME L"\\Device\\1394DIAG"
#define T1394DIAG_SYMBOLIC_LINK_NAME L"\\DosDevices\\1394DIAG"
// {C459DF55-DB08-11d1-B009-00A0C9081FF6}
DEFINE_GUID(GUID_1394DIAG, 0xc459df55, 0xdb08, 0x11d1, 0xb0, 0x9, 0x0, 0xa0, 0xc9, 0x8, 0x1f, 0xf6);
#define GUID_1394DIAG_STR "C459DF55-DB08-11d1-B009-00A0C9081FF6"
// these guys are meant to be called from a ring 3 app
// call through the port device object
#define IOCTL_1394_TOGGLE_ENUM_TEST_ON CTL_CODE( \
FILE_DEVICE_UNKNOWN, \
0x88, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS \
)
#define IOCTL_1394_TOGGLE_ENUM_TEST_OFF CTL_CODE( \
FILE_DEVICE_UNKNOWN, \
0x89, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS \
)
//
// IOCTL info, needs to be visible for application
//
#define DIAG1394_IOCTL_INDEX 0x0800
#define IOCTL_ALLOCATE_ADDRESS_RANGE CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 0, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_FREE_ADDRESS_RANGE CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 1, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_ASYNC_READ CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 2, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_ASYNC_WRITE CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 3, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_ASYNC_LOCK CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 4, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_ISOCH_ALLOCATE_BANDWIDTH CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 5, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_ISOCH_ALLOCATE_CHANNEL CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 6, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_ISOCH_ALLOCATE_RESOURCES CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 7, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_ISOCH_ATTACH_BUFFERS CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 8, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_ISOCH_DETACH_BUFFERS CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 9, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_ISOCH_FREE_BANDWIDTH CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 10, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_ISOCH_FREE_CHANNEL CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 11, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_ISOCH_FREE_RESOURCES CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 12, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_ISOCH_LISTEN CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 13, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_ISOCH_QUERY_CURRENT_CYCLE_TIME CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 14, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_ISOCH_QUERY_RESOURCES CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 15, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_ISOCH_SET_CHANNEL_BANDWIDTH CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 16, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_ISOCH_STOP CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 17, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_ISOCH_TALK CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 18, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_GET_LOCAL_HOST_INFORMATION CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 19, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_GET_1394_ADDRESS_FROM_DEVICE_OBJECT CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 20, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_CONTROL CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 21, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_GET_MAX_SPEED_BETWEEN_DEVICES CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 22, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_SET_DEVICE_XMIT_PROPERTIES CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 23, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_GET_CONFIGURATION_INFORMATION CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 24, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_BUS_RESET CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 25, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_GET_GENERATION_COUNT CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 26, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_SEND_PHY_CONFIGURATION_PACKET CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 27, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_BUS_RESET_NOTIFICATION CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 28, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_ASYNC_STREAM CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 29, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_SET_LOCAL_HOST_INFORMATION CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 30, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_SET_ADDRESS_DATA CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 40, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_BUS_RESET_NOTIFY CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 50, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IOCTL_GET_DIAG_VERSION CTL_CODE( FILE_DEVICE_UNKNOWN, \
DIAG1394_IOCTL_INDEX + 51, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#ifdef DRIVER
typedef struct _DEVICE_EXTENSION {
PDEVICE_OBJECT StackDeviceObject;
PDEVICE_OBJECT PortDeviceObject;
UNICODE_STRING SymbolicLinkName;
KSPIN_LOCK ResetSpinLock;
KSPIN_LOCK CromSpinLock;
KSPIN_LOCK AsyncSpinLock;
KSPIN_LOCK IsochSpinLock;
KSPIN_LOCK IsochResourceSpinLock;
BOOLEAN bShutdown;
POWER_STATE CurrentDevicePowerState;
ULONG GenerationCount;
LIST_ENTRY BusResetIrps;
LIST_ENTRY CromData;
LIST_ENTRY AsyncAddressData;
LIST_ENTRY IsochDetachData;
LIST_ENTRY IsochResourceData;
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
//
// This is used to keep track of pending irp's for
// notification of bus resets.
//
typedef struct _BUS_RESET_IRP {
LIST_ENTRY BusResetIrpList;
PIRP Irp;
} BUS_RESET_IRP, *PBUS_RESET_IRP;
//
// This is used to keep track of dynamic crom calls.
//
typedef struct _CROM_DATA {
LIST_ENTRY CromList;
HANDLE hCromData;
PVOID Buffer;
PMDL pMdl;
} CROM_DATA, *PCROM_DATA;
//
// This is used to store data for each async address range.
//
typedef struct _ASYNC_ADDRESS_DATA {
LIST_ENTRY AsyncAddressList;
PDEVICE_EXTENSION DeviceExtension;
PVOID Buffer;
ULONG nLength;
// PADDRESS_OFFSET Required1394Offset;
ULONG nAddressesReturned;
PADDRESS_RANGE AddressRange;
HANDLE hAddressRange;
PMDL pMdl;
} ASYNC_ADDRESS_DATA, *PASYNC_ADDRESS_DATA;
#define ISOCH_DETACH_TAG 0xaabbbbaa
//
// This is used to store data needed when calling IsochDetachBuffers.
// We need to store this data seperately for each call to IsochAttachBuffers.
//
typedef struct _ISOCH_DETACH_DATA {
LIST_ENTRY IsochDetachList;
ULONG Tag;
PDEVICE_EXTENSION DeviceExtension;
PISOCH_DESCRIPTOR IsochDescriptor;
PIRP Irp;
PIRB DetachIrb;
PIRB AttachIrb;
NTSTATUS AttachStatus;
KTIMER Timer;
KDPC TimerDpc;
HANDLE hResource;
ULONG numIsochDescriptors;
ULONG outputBufferLength;
ULONG bDetach;
WORK_QUEUE_ITEM WorkItem;
} ISOCH_DETACH_DATA, *PISOCH_DETACH_DATA;
//
// This is used to store allocated isoch resources.
// We use this information in case of a surprise removal.
//
typedef struct _ISOCH_RESOURCE_DATA {
LIST_ENTRY IsochResourceList;
HANDLE hResource;
} ISOCH_RESOURCE_DATA, *PISOCH_RESOURCE_DATA;
//
// 1394api.c
//
NTSTATUS
t1394Diag_GetLocalHostInformation(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN ULONG nLevel,
IN OUT PULONG UserStatus,
IN OUT PVOID Information
);
NTSTATUS
t1394Diag_Get1394AddressFromDeviceObject(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN ULONG fulFlags,
OUT PNODE_ADDRESS pNodeAddress
);
NTSTATUS
t1394Diag_Control(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
t1394Diag_GetMaxSpeedBetweenDevices(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN ULONG fulFlags,
IN ULONG ulNumberOfDestinations,
IN PDEVICE_OBJECT hDestinationDeviceObjects[64],
OUT PULONG fulSpeed
);
NTSTATUS
t1394Diag_SetDeviceXmitProperties(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN ULONG fulSpeed,
IN ULONG fulPriority
);
NTSTATUS
t1394Diag_GetConfigurationInformation(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
t1394Diag_BusReset(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN ULONG fulFlags
);
NTSTATUS
t1394Diag_GetGenerationCount(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN OUT PULONG GenerationCount
);
NTSTATUS
t1394Diag_SendPhyConfigurationPacket(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PHY_CONFIGURATION_PACKET PhyConfigurationPacket
);
NTSTATUS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -