NtDeviceIoControlFile 函数 (winternl.h)
已弃用。 为提供的缓冲区生成描述符 () ,并将非类型化数据传递给与文件句柄关联的设备驱动程序。 NtDeviceIoControlFile 被 DeviceIoControl 取代。
语法
__kernel_entry NTSTATUS NtDeviceIoControlFile(
[in] HANDLE FileHandle,
[in] HANDLE Event,
[in] PIO_APC_ROUTINE ApcRoutine,
[in] PVOID ApcContext,
[out] PIO_STATUS_BLOCK IoStatusBlock,
[in] ULONG IoControlCode,
[in] PVOID InputBuffer,
[in] ULONG InputBufferLength,
[out] PVOID OutputBuffer,
[in] ULONG OutputBufferLength
);
参数
[in] FileHandle
打开应向其提供控件信息的文件或设备的文件句柄。
[in] Event
要设置为 signaled
操作完成时状态的事件的句柄。 此参数可以为 NULL。
[in] ApcRoutine
操作完成后要调用的过程。 此参数可以为 NULL。 有关异步过程调用 (APC) 的详细信息,请参阅 异步过程调用。
[in] ApcContext
在操作完成时传递给 ApcRoutine 的指针。 如果指定 了 ApcRoutine ,则此参数是必需的。
[out] IoStatusBlock
用于接收最终完成状态和操作相关信息的变量。 返回信息的服务调用返回写入此变量的“信息”字段中输出缓冲区的数据的长度。
[in] IoControlCode
指示要执行哪个设备 I/O 控制功能的代码。
[in] InputBuffer
指向缓冲区的指针,该缓冲区包含要提供给目标设备的信息。 此参数可以为 NULL。 此信息依赖于设备。
[in] InputBufferLength
InputBuffer 的长度(以字节为单位)。 如果未提供缓冲区,则忽略此值。
[out] OutputBuffer
指向缓冲区的指针,该缓冲区用于从目标设备接收与设备相关的返回信息。 此参数可以为 NULL。
[in] OutputBufferLength
OutputBuffer 的长度(以字节为单位)。 如果未提供缓冲区,则忽略此值。
返回值
NTSTATUS 中定义了各种 NTSTATUS 值。H,随 Windows DDK 一起分发。
返回代码 | 说明 |
---|---|
|
控制操作已正确排队到 I/O 系统。 操作完成后,可以通过检查 I/O 状态块的“状态”字段来确定状态。 |
注解
NtDeviceIoControlFile 服务是一个依赖于设备的接口,它扩展了应用程序对系统内各种设备的控制。 此 API 为系统提供输入和输出数据的一致视图,同时仍为应用程序和驱动程序提供与设备相关的方法来指定通信接口。
调用方所需的文件访问类型取决于正在执行的实际操作。
服务完成后, 事件(如果指定)设置为 signaled
状态。 如果未指定 Event 参数,则 FileHandle 指定的文件对象将设置为 signaled
状态。 如果指定 了 ApcRoutine ,则会使用 ApcContext 和 IoStatusBlock 作为其参数调用它。
由于此函数没有导入库,因此必须使用 GetProcAddress。
要求
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | winternl.h |
Library | ntdll.lib |
DLL | ntdll.dll |