📄 ioctl.c
字号:
TRACE(TL_TRACE, ("IOCTL_ISOCH_QUERY_CURRENT_CYCLE_TIME\n"));
if (outputBufferLength < sizeof(CYCLE_TIME)) {
ntStatus = STATUS_BUFFER_TOO_SMALL;
}
else {
ntStatus = t1394_IsochQueryCurrentCycleTime( DeviceObject,
Irp,
(PCYCLE_TIME)ioBuffer
);
if (NT_SUCCESS(ntStatus))
Irp->IoStatus.Information = outputBufferLength;
}
}
break; // IOCTL_ISOCH_QUERY_CURRENT_CYCLE_TIME
case IOCTL_ISOCH_QUERY_RESOURCES:
{
PISOCH_QUERY_RESOURCES IsochQueryResources;
TRACE(TL_TRACE, ("IOCTL_ISOCH_QUERY_RESOURCES\n"));
if ((inputBufferLength < sizeof(ISOCH_QUERY_RESOURCES)) ||
(outputBufferLength < sizeof(ISOCH_QUERY_RESOURCES))) {
ntStatus = STATUS_BUFFER_TOO_SMALL;
}
else {
IsochQueryResources = (PISOCH_QUERY_RESOURCES)ioBuffer;
ntStatus = t1394_IsochQueryResources( DeviceObject,
Irp,
IsochQueryResources->fulSpeed,
&IsochQueryResources->BytesPerFrameAvailable,
&IsochQueryResources->ChannelsAvailable
);
if (NT_SUCCESS(ntStatus))
Irp->IoStatus.Information = outputBufferLength;
}
}
break; // IOCTL_ISOCH_QUERY_RESOURCES
case IOCTL_ISOCH_SET_CHANNEL_BANDWIDTH:
{
PISOCH_SET_CHANNEL_BANDWIDTH IsochSetChannelBandwidth;
TRACE(TL_TRACE, ("IOCTL_ISOCH_SET_CHANNEL_BANDWIDTH\n"));
if (inputBufferLength < sizeof(ISOCH_SET_CHANNEL_BANDWIDTH)) {
ntStatus = STATUS_BUFFER_TOO_SMALL;
}
else {
IsochSetChannelBandwidth = (PISOCH_SET_CHANNEL_BANDWIDTH)ioBuffer;
ntStatus = t1394_IsochSetChannelBandwidth( DeviceObject,
Irp,
IsochSetChannelBandwidth->hBandwidth,
IsochSetChannelBandwidth->nMaxBytesPerFrame
);
}
}
break; // IOCTL_ISOCH_SET_CHANNEL_BANDWIDTH
case IOCTL_ISOCH_MODIFY_STREAM_PROPERTIES:
{
PISOCH_MODIFY_STREAM_PROPERTIES IsochModifyStreamProperties;
TRACE(TL_TRACE, ("IOCTL_ISOCH_MODIFY_STREAM_PROPERTIES\n"));
if (inputBufferLength < sizeof (ISOCH_MODIFY_STREAM_PROPERTIES)) {
ntStatus = STATUS_BUFFER_TOO_SMALL;
}
else {
IsochModifyStreamProperties = (PISOCH_MODIFY_STREAM_PROPERTIES)ioBuffer;
ntStatus = t1394_IsochModifyStreamProperties( DeviceObject,
Irp,
IsochModifyStreamProperties->hResource,
IsochModifyStreamProperties->ChannelMask,
IsochModifyStreamProperties->fulSpeed
);
}
}
break; // IOCTL_ISOCH_MODIFY_STREAM_PROPERTIES
case IOCTL_ISOCH_STOP:
{
PISOCH_STOP IsochStop;
TRACE(TL_TRACE, ("IOCTL_ISOCH_STOP\n"));
if (inputBufferLength < sizeof(ISOCH_STOP)) {
ntStatus = STATUS_BUFFER_TOO_SMALL;
}
else {
IsochStop = (PISOCH_STOP)ioBuffer;
ntStatus = t1394_IsochStop( DeviceObject,
Irp,
IsochStop->hResource,
IsochStop->fulFlags
);
}
}
break; // IOCTL_ISOCH_STOP
case IOCTL_ISOCH_TALK:
{
PISOCH_TALK IsochTalk;
TRACE(TL_TRACE, ("IOCTL_ISOCH_TALK\n"));
if (inputBufferLength < sizeof(ISOCH_TALK)) {
ntStatus = STATUS_BUFFER_TOO_SMALL;
}
else {
IsochTalk = (PISOCH_TALK)ioBuffer;
ntStatus = t1394_IsochTalk( DeviceObject,
Irp,
IsochTalk->hResource,
IsochTalk->fulFlags,
IsochTalk->StartTime
);
}
}
break; // IOCTL_ISOCH_TALK
case IOCTL_GET_LOCAL_HOST_INFORMATION:
{
PGET_LOCAL_HOST_INFORMATION GetLocalHostInformation;
TRACE(TL_TRACE, ("IOCTL_GET_LOCAL_HOST_INFORMATION\n"));
if ((inputBufferLength < sizeof(GET_LOCAL_HOST_INFORMATION)) ||
(outputBufferLength < sizeof(GET_LOCAL_HOST_INFORMATION))) {
ntStatus = STATUS_BUFFER_TOO_SMALL;
}
else {
GetLocalHostInformation = (PGET_LOCAL_HOST_INFORMATION)ioBuffer;
ntStatus = t1394_GetLocalHostInformation( DeviceObject,
Irp,
GetLocalHostInformation->nLevel,
&GetLocalHostInformation->Status,
(PVOID)GetLocalHostInformation->Information
);
if (NT_SUCCESS(ntStatus))
Irp->IoStatus.Information = outputBufferLength;
}
}
break; // IOCTL_GET_LOCAL_HOST_INFORMATION
case IOCTL_GET_1394_ADDRESS_FROM_DEVICE_OBJECT:
{
PGET_1394_ADDRESS Get1394Address;
TRACE(TL_TRACE, ("IOCTL_GET_1394_ADDRESS_FROM_DEVICE_OBJECT\n"));
if ((inputBufferLength < sizeof(GET_1394_ADDRESS)) ||
(outputBufferLength < sizeof(GET_1394_ADDRESS))) {
ntStatus = STATUS_BUFFER_TOO_SMALL;
}
else {
Get1394Address = (PGET_1394_ADDRESS)ioBuffer;
ntStatus = t1394_Get1394AddressFromDeviceObject( DeviceObject,
Irp,
Get1394Address->fulFlags,
&Get1394Address->NodeAddress
);
if (NT_SUCCESS(ntStatus))
Irp->IoStatus.Information = outputBufferLength;
}
}
break; // IOCTL_GET_1394_ADDRESS_FROM_DEVICE_OBJECT
case IOCTL_CONTROL:
TRACE(TL_TRACE, ("IOCTL_CONTROL\n"));
ntStatus = t1394_Control( DeviceObject,
Irp
);
break; // IOCTL_CONTROL
case IOCTL_GET_MAX_SPEED_BETWEEN_DEVICES:
{
PGET_MAX_SPEED_BETWEEN_DEVICES MaxSpeedBetweenDevices;
TRACE(TL_TRACE, ("IOCTL_GET_MAX_SPEED_BETWEEN_DEVICES\n"));
if ((inputBufferLength < sizeof(GET_MAX_SPEED_BETWEEN_DEVICES)) ||
(outputBufferLength < sizeof(GET_MAX_SPEED_BETWEEN_DEVICES))) {
ntStatus = STATUS_BUFFER_TOO_SMALL;
}
else {
MaxSpeedBetweenDevices = (PGET_MAX_SPEED_BETWEEN_DEVICES)ioBuffer;
ntStatus = t1394_GetMaxSpeedBetweenDevices( DeviceObject,
Irp,
MaxSpeedBetweenDevices->fulFlags,
MaxSpeedBetweenDevices->ulNumberOfDestinations,
(PDEVICE_OBJECT *)&MaxSpeedBetweenDevices->hDestinationDeviceObjects[0],
&MaxSpeedBetweenDevices->fulSpeed
);
if (NT_SUCCESS(ntStatus))
Irp->IoStatus.Information = outputBufferLength;
}
}
break; // IOCTL_GET_MAX_SPEED_BETWEEN_DEVICES
case IOCTL_SET_DEVICE_XMIT_PROPERTIES:
{
PDEVICE_XMIT_PROPERTIES DeviceXmitProperties;
TRACE(TL_TRACE, ("IOCTL_SET_DEVICE_XMIT_PROPERTIES\n"));
if (inputBufferLength < sizeof(DEVICE_XMIT_PROPERTIES)) {
ntStatus = STATUS_BUFFER_TOO_SMALL;
}
else {
DeviceXmitProperties = (PDEVICE_XMIT_PROPERTIES)ioBuffer;
ntStatus = t1394_SetDeviceXmitProperties( DeviceObject,
Irp,
DeviceXmitProperties->fulSpeed,
DeviceXmitProperties->fulPriority
);
}
}
break; // IOCTL_SET_DEVICE_XMIT_PROPERTIES
case IOCTL_GET_CONFIGURATION_INFORMATION:
TRACE(TL_TRACE, ("IOCTL_GET_CONFIGURATION_INFORMATION\n"));
ntStatus = t1394_GetConfigurationInformation( DeviceObject,
Irp
);
break; // IOCTL_GET_CONFIGURATION_INFORMATION
case IOCTL_BUS_RESET:
{
TRACE(TL_TRACE, ("IOCTL_BUS_RESET\n"));
if (inputBufferLength < sizeof(ULONG)) {
ntStatus = STATUS_BUFFER_TOO_SMALL;
}
else {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -