📄 ioctl.c
字号:
{
PISOCH_ALLOCATE_RESOURCES IsochAllocateResources;
TRACE(TL_TRACE, ("IOCTL_ISOCH_ALLOCATE_RESOURCES\n"));
if ((inputBufferLength < sizeof(ISOCH_ALLOCATE_RESOURCES)) ||
(outputBufferLength < sizeof(ISOCH_ALLOCATE_RESOURCES))) {
ntStatus = STATUS_BUFFER_TOO_SMALL;
}
else {
IsochAllocateResources = (PISOCH_ALLOCATE_RESOURCES)ioBuffer;
ntStatus = t1394Diag_IsochAllocateResources( DeviceObject,
Irp,
IsochAllocateResources->fulSpeed,
IsochAllocateResources->fulFlags,
IsochAllocateResources->nChannel,
IsochAllocateResources->nMaxBytesPerFrame,
IsochAllocateResources->nNumberOfBuffers,
IsochAllocateResources->nMaxBufferSize,
IsochAllocateResources->nQuadletsToStrip,
&IsochAllocateResources->hResource
);
if (NT_SUCCESS(ntStatus))
Irp->IoStatus.Information = outputBufferLength;
}
}
break; // IOCTL_ISOCH_ALLOCATE_RESOURCES
case IOCTL_ISOCH_ATTACH_BUFFERS:
{
PISOCH_ATTACH_BUFFERS IsochAttachBuffers;
TRACE(TL_TRACE, ("IOCTL_ISOCH_ATTACH_BUFFERS\n"));
if (inputBufferLength < (sizeof(ISOCH_ATTACH_BUFFERS)+sizeof(RING3_ISOCH_DESCRIPTOR))) {
ntStatus = STATUS_BUFFER_TOO_SMALL;
}
else {
IsochAttachBuffers = (PISOCH_ATTACH_BUFFERS)ioBuffer;
if (outputBufferLength < (sizeof(ISOCH_ATTACH_BUFFERS) +
(sizeof(RING3_ISOCH_DESCRIPTOR)*IsochAttachBuffers->nNumberOfDescriptors))) {
ntStatus = STATUS_BUFFER_TOO_SMALL;
}
else {
ntStatus = t1394Diag_IsochAttachBuffers( DeviceObject,
Irp,
outputBufferLength,
IsochAttachBuffers->hResource,
IsochAttachBuffers->nNumberOfDescriptors,
(PISOCH_DESCRIPTOR)IsochAttachBuffers->pIsochDescriptor,
(PRING3_ISOCH_DESCRIPTOR)&IsochAttachBuffers->R3_IsochDescriptor
);
if (ntStatus == STATUS_PENDING)
goto t1394Diag_IoControlExit;
}
}
}
break; // IOCTL_ISOCH_ATTACH_BUFFERS
case IOCTL_ISOCH_DETACH_BUFFERS:
{
PISOCH_DETACH_BUFFERS IsochDetachBuffers;
TRACE(TL_TRACE, ("IOCTL_ISOCH_DETACH_BUFFERS\n"));
if (inputBufferLength < sizeof(ISOCH_DETACH_BUFFERS)) {
ntStatus = STATUS_BUFFER_TOO_SMALL;
}
else {
IsochDetachBuffers = (PISOCH_DETACH_BUFFERS)ioBuffer;
ntStatus = t1394Diag_IsochDetachBuffers( DeviceObject,
Irp,
IsochDetachBuffers->hResource,
IsochDetachBuffers->nNumberOfDescriptors,
(PISOCH_DESCRIPTOR)IsochDetachBuffers->pIsochDescriptor
);
}
}
break; // IOCTL_ISOCH_DETACH_BUFFERS
case IOCTL_ISOCH_FREE_BANDWIDTH:
{
TRACE(TL_TRACE, ("IOCTL_ISOCH_FREE_BANDWIDTH\n"));
if (inputBufferLength < sizeof(HANDLE)) {
ntStatus = STATUS_BUFFER_TOO_SMALL;
}
else {
ntStatus = t1394Diag_IsochFreeBandwidth( DeviceObject,
Irp,
*(PHANDLE)ioBuffer
);
}
}
break; // IOCTL_ISOCH_FREE_BANDWIDTH
case IOCTL_ISOCH_FREE_CHANNEL:
{
TRACE(TL_TRACE, ("IOCTL_ISOCH_FREE_CHANNEL\n"));
if (inputBufferLength < sizeof(ULONG)) {
ntStatus = STATUS_BUFFER_TOO_SMALL;
}
else {
ntStatus = t1394Diag_IsochFreeChannel( DeviceObject,
Irp,
*(PULONG)ioBuffer
);
}
}
break; // IOCTL_ISOCH_FREE_CHANNEL
case IOCTL_ISOCH_FREE_RESOURCES:
{
TRACE(TL_TRACE, ("IOCTL_ISOCH_FREE_RESOURCES\n"));
if (inputBufferLength < sizeof(HANDLE)) {
ntStatus = STATUS_BUFFER_TOO_SMALL;
}
else {
ntStatus = t1394Diag_IsochFreeResources( DeviceObject,
Irp,
*(PHANDLE)ioBuffer
);
}
}
break; // IOCTL_ISOCH_FREE_RESOURCES
case IOCTL_ISOCH_LISTEN:
{
PISOCH_LISTEN IsochListen;
TRACE(TL_TRACE, ("IOCTL_ISOCH_LISTEN\n"));
if (inputBufferLength < sizeof(ISOCH_LISTEN)) {
ntStatus = STATUS_BUFFER_TOO_SMALL;
}
else {
IsochListen = (PISOCH_LISTEN)ioBuffer;
ntStatus = t1394Diag_IsochListen( DeviceObject,
Irp,
IsochListen->hResource,
IsochListen->fulFlags,
IsochListen->StartTime
);
}
}
break; // IOCTL_ISOCH_LISTEN
case IOCTL_ISOCH_QUERY_CURRENT_CYCLE_TIME:
{
TRACE(TL_TRACE, ("IOCTL_ISOCH_QUERY_CURRENT_CYCLE_TIME\n"));
if (outputBufferLength < sizeof(CYCLE_TIME)) {
ntStatus = STATUS_BUFFER_TOO_SMALL;
}
else {
ntStatus = t1394Diag_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 = t1394Diag_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 = t1394Diag_IsochSetChannelBandwidth( DeviceObject,
Irp,
IsochSetChannelBandwidth->hBandwidth,
IsochSetChannelBandwidth->nMaxBytesPerFrame
);
}
}
break; // IOCTL_ISOCH_SET_CHANNEL_BANDWIDTH
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 = t1394Diag_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 = t1394Diag_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 = t1394Diag_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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -