📄 1394api.c
字号:
TRAP;
}
if (pIrb)
ExFreePool(pIrb);
Exit_GetMaxSpeedBetweenDevices:
EXIT("t1394Diag_GetMaxSpeedBetweenDevices", ntStatus);
return(ntStatus);
} // t1394Diag_GetMaxSpeedBetweenDevices
NTSTATUS
t1394Diag_SetDeviceXmitProperties(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN ULONG fulSpeed,
IN ULONG fulPriority
)
{
NTSTATUS ntStatus = STATUS_SUCCESS;
PDEVICE_EXTENSION deviceExtension = DeviceObject->DeviceExtension;
PIRB pIrb;
ENTER("t1394Diag_SetDeviceXmitProperties");
TRACE(TL_TRACE, ("fulSpeed = 0x%x\n", fulSpeed));
TRACE(TL_TRACE, ("fulPriority = 0x%x\n", fulPriority));
pIrb = ExAllocatePool(NonPagedPool, sizeof(IRB));
if (!pIrb) {
TRACE(TL_ERROR, ("Failed to allocate pIrb!\n"));
TRAP;
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
goto Exit_SetDeviceXmitProperties;
} // if
pIrb->FunctionNumber = REQUEST_SET_DEVICE_XMIT_PROPERTIES;
pIrb->Flags = 0;
pIrb->u.SetDeviceXmitProperties.fulSpeed = fulSpeed;
pIrb->u.SetDeviceXmitProperties.fulPriority = fulPriority;
ntStatus = t1394Diag_SubmitIrpSynch(deviceExtension->StackDeviceObject, Irp, pIrb);
if (!NT_SUCCESS(ntStatus)) {
TRACE(TL_ERROR, ("SubmitIrpSync failed = 0x%x\n", ntStatus));
TRAP;
}
ExFreePool(pIrb);
Exit_SetDeviceXmitProperties:
EXIT("t1394Diag_SetDeviceXmitProperties", ntStatus);
return(ntStatus);
} // t1394Diag_SetDeviceXmitProperties
NTSTATUS
t1394Diag_GetConfigurationInformation(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
)
{
NTSTATUS ntStatus = STATUS_SUCCESS;
PDEVICE_EXTENSION deviceExtension = DeviceObject->DeviceExtension;
PIRB pIrb;
ENTER("t1394Diag_GetConfigurationInformation");
/*
struct {
PCONFIG_ROM ConfigRom; // Pointer to config rom
ULONG UnitDirectoryBufferSize;
PVOID UnitDirectory; // Pointer to unit directory
IO_ADDRESS UnitDirectoryLocation; // Starting Location of Unit Directory
ULONG UnitDependentDirectoryBufferSize;
PVOID UnitDependentDirectory;
IO_ADDRESS UnitDependentDirectoryLocation;
ULONG VendorLeafBufferSize; // Size available to get vendor leafs
PTEXTUAL_LEAF VendorLeaf; // Pointer to vendor leafs
ULONG ModelLeafBufferSize; // Size available to get model leafs
PTEXTUAL_LEAF ModelLeaf; // Pointer to model leafs
} GetConfigurationInformation;
*/
return(STATUS_NOT_IMPLEMENTED);
pIrb = ExAllocatePool(NonPagedPool, sizeof(IRB));
if (!pIrb) {
TRACE(TL_ERROR, ("Failed to allocate pIrb!\n"));
TRAP;
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
goto Exit_GetConfigurationInformation;
} // if
pIrb->FunctionNumber = REQUEST_GET_CONFIGURATION_INFO;
pIrb->Flags = 0;
ntStatus = t1394Diag_SubmitIrpSynch(deviceExtension->StackDeviceObject, Irp, pIrb);
if (NT_SUCCESS(ntStatus)) {
TRACE(TL_TRACE, ("ConfigRom->CR_Info = 0x%x\n",
pIrb->u.GetConfigurationInformation.ConfigRom->CR_Info));
TRACE(TL_TRACE, ("ConfigRom->CR_Signiture = 0x%x\n",
pIrb->u.GetConfigurationInformation.ConfigRom->CR_Signiture));
TRACE(TL_TRACE, ("ConfigRom->CR_BusInfoBlockCaps = 0x%x\n",
pIrb->u.GetConfigurationInformation.ConfigRom->CR_BusInfoBlockCaps));
TRACE(TL_TRACE, ("ConfigRom->CR_Node_UniqueID[0] = 0x%x\n",
pIrb->u.GetConfigurationInformation.ConfigRom->CR_Node_UniqueID[0]));
TRACE(TL_TRACE, ("ConfigRom->CR_Node_UniqueID[1] = 0x%x\n",
pIrb->u.GetConfigurationInformation.ConfigRom->CR_Node_UniqueID[1]));
TRACE(TL_TRACE, ("ConfigRom->CR_Root_Info = 0x%x\n",
pIrb->u.GetConfigurationInformation.ConfigRom->CR_Root_Info));
TRACE(TL_TRACE, ("UnitDirectoryBufferSize = 0x%x\n",
pIrb->u.GetConfigurationInformation.UnitDirectoryBufferSize));
TRACE(TL_TRACE, ("UnitDirectory = 0x%x\n", pIrb->u.GetConfigurationInformation.UnitDirectory));
TRACE(TL_TRACE, ("UnitDirectoryLocation.NA_Bus_Number = 0x%x\n",
pIrb->u.GetConfigurationInformation.UnitDirectoryLocation.IA_Destination_ID.NA_Bus_Number));
TRACE(TL_TRACE, ("UnitDirectoryLocation.NA_Node_Number = 0x%x\n",
pIrb->u.GetConfigurationInformation.UnitDirectoryLocation.IA_Destination_ID.NA_Node_Number));
TRACE(TL_TRACE, ("UnitDirectoryLocation.Off_High = 0x%x\n",
pIrb->u.GetConfigurationInformation.UnitDirectoryLocation.IA_Destination_Offset.Off_High));
TRACE(TL_TRACE, ("UnitDirectoryLocation.Off_Low = 0x%x\n",
pIrb->u.GetConfigurationInformation.UnitDirectoryLocation.IA_Destination_Offset.Off_Low));
TRACE(TL_TRACE, ("UnitDependentDirectoryBufferSize = 0x%x\n",
pIrb->u.GetConfigurationInformation.UnitDependentDirectoryBufferSize));
TRACE(TL_TRACE, ("UnitDependentDirectory = 0x%x\n",
pIrb->u.GetConfigurationInformation.UnitDependentDirectory));
TRACE(TL_TRACE, ("UnitDependentDirectoryLocation.NA_Bus_Number = 0x%x\n",
pIrb->u.GetConfigurationInformation.UnitDependentDirectoryLocation.IA_Destination_ID.NA_Bus_Number));
TRACE(TL_TRACE, ("UnitDependentDirectoryLocation.NA_Node_Number = 0x%x\n",
pIrb->u.GetConfigurationInformation.UnitDependentDirectoryLocation.IA_Destination_ID.NA_Node_Number));
TRACE(TL_TRACE, ("UnitDependentDirectoryLocation.Off_High = 0x%x\n",
pIrb->u.GetConfigurationInformation.UnitDependentDirectoryLocation.IA_Destination_Offset.Off_High));
TRACE(TL_TRACE, ("UnitDependentDirectoryLocation.Off_Low = 0x%x\n",
pIrb->u.GetConfigurationInformation.UnitDependentDirectoryLocation.IA_Destination_Offset.Off_Low));
TRACE(TL_TRACE, ("VendorLeafBufferSize = 0x%x\n",
pIrb->u.GetConfigurationInformation.VendorLeafBufferSize));
TRACE(TL_TRACE, ("VendorLeaf->TL_CRC = 0x%x\n",
pIrb->u.GetConfigurationInformation.VendorLeaf->TL_CRC));
TRACE(TL_TRACE, ("VendorLeaf->TL_Length = 0x%x\n",
pIrb->u.GetConfigurationInformation.VendorLeaf->TL_Length));
TRACE(TL_TRACE, ("VendorLeaf->TL_Spec_Id = 0x%x\n",
pIrb->u.GetConfigurationInformation.VendorLeaf->TL_Spec_Id));
TRACE(TL_TRACE, ("VendorLeaf->TL_Language_Id = 0x%x\n",
pIrb->u.GetConfigurationInformation.VendorLeaf->TL_Language_Id));
TRACE(TL_TRACE, ("ModelLeafBufferSize = 0x%x\n",
pIrb->u.GetConfigurationInformation.ModelLeafBufferSize));
TRACE(TL_TRACE, ("ModelLeaf->TL_CRC = 0x%x\n",
pIrb->u.GetConfigurationInformation.ModelLeaf->TL_CRC));
TRACE(TL_TRACE, ("ModelLeaf->TL_Length = 0x%x\n",
pIrb->u.GetConfigurationInformation.ModelLeaf->TL_Length));
TRACE(TL_TRACE, ("ModelLeaf->TL_Spec_Id = 0x%x\n",
pIrb->u.GetConfigurationInformation.ModelLeaf->TL_Spec_Id));
TRACE(TL_TRACE, ("ModelLeaf->TL_Language_Id = 0x%x\n",
pIrb->u.GetConfigurationInformation.ModelLeaf->TL_Language_Id));
}
else {
TRACE(TL_ERROR, ("SubmitIrpSync failed = 0x%x\n", ntStatus));
TRAP;
}
if (pIrb)
ExFreePool(pIrb);
Exit_GetConfigurationInformation:
EXIT("t1394Diag_GetConfigurationInformation", ntStatus);
return(ntStatus);
} // t1394Diag_GetConfigurationInformation
NTSTATUS
t1394Diag_BusReset(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN ULONG fulFlags
)
{
NTSTATUS ntStatus = STATUS_SUCCESS;
PDEVICE_EXTENSION deviceExtension = DeviceObject->DeviceExtension;
PIRB pIrb;
ENTER("t1394Diag_BusReset");
TRACE(TL_TRACE, ("fulFlags = 0x%x\n", fulFlags));
pIrb = ExAllocatePool(NonPagedPool, sizeof(IRB));
if (!pIrb) {
TRACE(TL_ERROR, ("Failed to allocate pIrb!\n"));
TRAP;
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
goto Exit_BusReset;
} // if
pIrb->FunctionNumber = REQUEST_BUS_RESET;
pIrb->Flags = 0;
pIrb->u.BusReset.fulFlags = fulFlags;
ntStatus = t1394Diag_SubmitIrpSynch(deviceExtension->StackDeviceObject, Irp, pIrb);
if (!NT_SUCCESS(ntStatus)) {
TRACE(TL_ERROR, ("SubmitIrpSync failed = 0x%x\n", ntStatus));
TRAP;
}
ExFreePool(pIrb);
Exit_BusReset:
EXIT("t1394Diag_BusReset", ntStatus);
return(ntStatus);
} // t1394Diag_BusReset
NTSTATUS
t1394Diag_GetGenerationCount(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN OUT PULONG GenerationCount
)
{
NTSTATUS ntStatus = STATUS_SUCCESS;
PDEVICE_EXTENSION deviceExtension = DeviceObject->DeviceExtension;
PIRB pIrb;
ENTER("t1394Diag_GetGenerationCount");
TRACE(TL_TRACE, ("GenerationCount = 0x%x\n", GenerationCount));
pIrb = ExAllocatePool(NonPagedPool, sizeof(IRB));
if (!pIrb) {
TRACE(TL_ERROR, ("Failed to allocate pIrb!\n"));
TRAP;
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
goto Exit_GetGenerationCount;
} // if
pIrb->FunctionNumber = REQUEST_GET_GENERATION_COUNT;
pIrb->Flags = 0;
ntStatus = t1394Diag_SubmitIrpSynch(deviceExtension->StackDeviceObject, Irp, pIrb);
if (NT_SUCCESS(ntStatus)) {
*GenerationCount = pIrb->u.GetGenerationCount.GenerationCount;
TRACE(TL_TRACE, ("GenerationCount = 0x%x\n", *GenerationCount));
}
else {
TRACE(TL_ERROR, ("SubmitIrpSync failed = 0x%x\n", ntStatus));
TRAP;
}
ExFreePool(pIrb);
Exit_GetGenerationCount:
EXIT("t1394Diag_GetGenerationCount", ntStatus);
return(ntStatus);
} // t1394Diag_GetGenerationCount
NTSTATUS
t1394Diag_SendPhyConfigurationPacket(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PHY_CONFIGURATION_PACKET PhyConfigurationPacket
)
{
NTSTATUS ntStatus = STATUS_SUCCESS;
PDEVICE_EXTENSION deviceExtension = DeviceObject->DeviceExtension;
PIRB pIrb;
ENTER("t1394Diag_SendPhyConfigurationPacket");
TRACE(TL_TRACE, ("PCP_Phys_ID = 0x%x\n", PhyConfigurationPacket.PCP_Phys_ID));
TRACE(TL_TRACE, ("PCP_Packet_ID = 0x%x\n", PhyConfigurationPacket.PCP_Packet_ID));
TRACE(TL_TRACE, ("PCP_Gap_Count = 0x%x\n", PhyConfigurationPacket.PCP_Gap_Count));
TRACE(TL_TRACE, ("PCP_Set_Gap_Count = 0x%x\n", PhyConfigurationPacket.PCP_Set_Gap_Count));
TRACE(TL_TRACE, ("PCP_Force_Root = 0x%x\n", PhyConfigurationPacket.PCP_Force_Root));
TRACE(TL_TRACE, ("PCP_Reserved1 = 0x%x\n", PhyConfigurationPacket.PCP_Reserved1));
TRACE(TL_TRACE, ("PCP_Reserved2 = 0x%x\n", PhyConfigurationPacket.PCP_Reserved2));
TRACE(TL_TRACE, ("PCP_Inverse = 0x%x\n", PhyConfigurationPacket.PCP_Inverse));
pIrb = ExAllocatePool(NonPagedPool, sizeof(IRB));
if (!pIrb) {
TRACE(TL_ERROR, ("Failed to allocate pIrb!\n"));
TRAP;
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
goto Exit_SendPhyConfigurationPacket;
} // if
pIrb->FunctionNumber = REQUEST_SEND_PHY_CONFIG_PACKET;
pIrb->Flags = 0;
pIrb->u.SendPhyConfigurationPacket.PhyConfigurationPacket = PhyConfigurationPacket;
ntStatus = t1394Diag_SubmitIrpSynch(deviceExtension->StackDeviceObject, Irp, pIrb);
if (!NT_SUCCESS(ntStatus)) {
TRACE(TL_ERROR, ("SubmitIrpSync failed = 0x%x\n", ntStatus));
TRAP;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -