NtDeviceIoControlFile 函数 (winternl.h)

已弃用。 为提供的缓冲区生成描述符 () ,并将非类型化数据传递给与文件句柄关联的设备驱动程序。 NtDeviceIoControlFileDeviceIoControl 取代。

语法

__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 一起分发。

返回代码 说明
STATUS_SUCCESS
控制操作已正确排队到 I/O 系统。 操作完成后,可以通过检查 I/O 状态块的“状态”字段来确定状态。

注解

NtDeviceIoControlFile 服务是一个依赖于设备的接口,它扩展了应用程序对系统内各种设备的控制。 此 API 为系统提供输入和输出数据的一致视图,同时仍为应用程序和驱动程序提供与设备相关的方法来指定通信接口。

调用方所需的文件访问类型取决于正在执行的实际操作。

服务完成后, 事件(如果指定)设置为 signaled 状态。 如果未指定 Event 参数,则 FileHandle 指定的文件对象将设置为 signaled 状态。 如果指定 了 ApcRoutine ,则会使用 ApcContextIoStatusBlock 作为其参数调用它。

由于此函数没有导入库,因此必须使用 GetProcAddress

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 winternl.h
Library ntdll.lib
DLL ntdll.dll

另请参阅

异步过程调用