|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
DeviceIoControl
The DeviceIoControl function sends a control code directly to a specified device driver, causing the corresponding device to perform the specified operation.
BOOL DeviceIoControl(
HANDLE hDevice, // handle to device of interest DWORD dwIoControlCode, // control code of operation to perform LPVOID lpInBuffer, // pointer to buffer to supply input data DWORD nInBufferSize, // size of input buffer LPVOID lpOutBuffer, // pointer to buffer to receive output data DWORD nOutBufferSize, // size of output buffer LPDWORD lpBytesReturned, // pointer to variable to receive output byte count LPOVERLAPPED lpOverlapped // pointer to overlapped structure for asynchronous operation );
Parameters
hDevice
Handle to the device that is to perform the operation. Call the CreateFile function to obtain a device handle.
dwIoControlCode
Specifies the control code for the operation. This value identifies the specific operation to be performed and the type of device on which the operation is to be performed. The following values are defined:
Value Meaning FSCTL_DISMOUNT_VOLUME Dismounts a volume. FSCTL_GET_COMPRESSION Obtains the compression state of a file or directory FSCTL_LOCK_VOLUME Locks a volume. FSCTL_READ_COMPRESSION Reserved for future use. FSCTL_SET_COMPRESSION Sets the compression state of a file or directory. FSCTL_UNLOCK_VOLUME Unlocks a volume. FSCTL_WRITE_COMPRESSION Reserved for future use. IOCTL_DISK_CHECK_VERIFY Obsolete. Use IOCTL_STORAGE_CHECK_VERIFY IOCTL_DISK_EJECT_MEDIA Obsolete. Use IOCTL_STORAGE_EJECT_MEDIA IOCTL_DISK_FORMAT_TRACKS Formats a contiguous set of disk tracks. IOCTL_DISK_GET_DRIVE_GEOMETRY Obtains information on the physical disk's geometry. IOCTL_DISK_GET_DRIVE_LAYOUT Provides information about each partition on a disk. IOCTL_DISK_GET_MEDIA_TYPES Obsolete. Use IOCTL_STORAGE_GET_MEDIA_TYPES IOCTL_DISK_GET_PARTITION_INFO Obtains disk partition information. IOCTL_DISK_LOAD_MEDIA Obsolete. Use IOCTL_STORAGE_LOAD_MEDIA IOCTL_DISK_MEDIA_REMOVAL Obsolete. Use IOCTL_STORAGE_MEDIA_REMOVAL IOCTL_DISK_PERFORMANCE Provides disk performance information. IOCTL_DISK_REASSIGN_BLOCKS Maps disk blocks to spare-block pool. IOCTL_DISK_SET_DRIVE_LAYOUT Partitions a disk. IOCTL_DISK_SET_PARTITION_INFO Sets the disk partition type. IOCTL_DISK_VERIFY Performs logical format of a disk extent. IOCTL_SERIAL_LSRMST_INSERT Enables or disables placement of a line and modem status data into the data stream. IOCTL_STORAGE_CHECK_VERIFY Checks for change in a removable-media device. IOCTL_STORAGE_EJECT_MEDIA Ejects media from a SCSI device. IOCTL_STORAGE_GET_MEDIA_TYPES Obtains information about media support. IOCTL_STORAGE_LOAD_MEDIA Loads media into a device. IOCTL_STORAGE_MEDIA_REMOVAL Enables or disables the media eject mechanism.
For more detailed information on each control code, see its topic. In particular, each topic provides details on the usage of the lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, and lpBytesReturned parameters.
lpInBuffer
Pointer to a buffer that contains the data required to perform the operation. This parameter can be NULL if the dwIoControlCode parameter specifies an operation that does not require input data.
nInBufferSize
Specifies the size, in bytes, of the buffer pointed to by lpInBuffer.
lpOutBuffer
Pointer to a buffer that receives the operation's output data. This parameter can be NULL if the dwIoControlCode parameter specifies an operation that does not produce output data.
nOutBufferSize
Specifies the size, in bytes, of the buffer pointed to by lpOutBuffer.
lpBytesReturned
Pointer to a variable that receives the size, in bytes, of the data stored into the buffer pointed to by lpOutBuffer. If lpOverlapped is NULL, lpBytesReturned cannot be NULL. Even when an operation produces no output data, and lpOutBuffer can be NULL, the DeviceIoControl function makes use of the variable pointed to by lpBytesReturned. After such an operation, the value of the variable is without meaning. If lpOverlapped is not NULL, lpBytesReturned can be NULL. If this is an overlapped operation, you can get the number of bytes returned by calling GetOverlappedResult. If hDevice is associated with an I/O completion port, you can get the number of bytes returned by calling GetQueuedCompletionStatus.
lpOverlapped
Pointer to an OVERLAPPED structure. If hDevice was opened with the FILE_FLAG_OVERLAPPED flag, this parameter must point to a valid OVERLAPPED structure. In this case, DeviceIoControl is performed as an overlapped (asynchronous) operation. If the device was opened with FILE_FLAG_OVERLAPPED and lpOverlapped is NULL, the function fails in unpredictable ways. If hDevice was opened without specifying the FILE_FLAG_OVERLAPPED flag, this parameter is ignored and the DeviceIoControl function does not return until the operation has been completed, or an error occurs.
Return Values
If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error information, call GetLastError.
Remarks
If hDevice was opened with FILE_FLAG_OVERLAPPED and the lpOverlapped parameter points to an OVERLAPPED structure, DeviceIoControl is performed as an overlapped (asynchronous) operation. In this case, the OVERLAPPED structure must contain a handle to a manual-reset event object created by a call to the CreateEvent function. For more information on manual-reset event objects, see Synchronization. If the overlapped operation cannot be completed immediately, the function returns FALSE, and GetLastError returns ERROR_IO_PENDING, indicating that the operation is executing in the background. When this happens, the operating system sets the event object in the OVERLAPPED structure to the nonsignaled state before DeviceIoControl returns. The system then sets the event object to the signaled state when the operation has been completed. The calling thread can use any of the wait functions to wait for the event object to be signaled, and then use the GetOverlappedResult function to determine the results of the operation. The GetOverlappedResult function reports the success or failure of the operation and the number of bytes returned in the lpOutBuffer buffer.
See Also
CreateEvent, CreateFile, GetOverlappedResult, GetQueuedCompletionStatus, OVERLAPPED
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
DeviceIoControl
Функция DeviceIoControl посылает управляющий код непосредственно определенному водителю устройства, вызывающему соответствующее устройство, чтобы выполнять определенное действие.
BOOL DeviceIoControl(
РУЧКА hDevice, // оперируется на устройство интереса DWORD dwIoControlCode, // управляющего кода операции, чтобы выполнять LPVOID lpInBuffer, // указатель, чтобы буферизоваться, чтобы поставлять входные данные DWORD nInBufferSize, // размер входного буфера LPVOID lpOutBuffer, // указателя, чтобы буферизоваться, чтобы получать выходные данные DWORD nOutBufferSize, // размер выходного буфера LPDWORD lpBytesReturned, // указатель в переменную, чтобы получать выходной байтовый счет LPOVERLAPPED lpOverlapped // указатель на перекрывшее структуру для асинхронной операции );
Параметры
hDevice
Прооперируйте устройство, которое должно выполнить операцию. Назовите функцию CreateFile, чтобы получать ручку устройства.
dwIoControlCode
Определяет управляющий код для операции. Эта величина идентифицирует специфическую операцию, которая нужно выполняться и тип устройства на котором операция должна быть выполнена. Следующие величины определены:
Значение Величины FSCTL_DISMOUNT_VOLUME Снимает объем. FSCTL_GET_COMPRESSION Получает состояние сжатия файла или директорий FSCTL_LOCK_VOLUME Запирает объем. FSCTL_READ_COMPRESSION Резервировался для будущего использования. FSCTL_SET_COMPRESSION Устанавливает состояние сжатия файла или директория. FSCTL_UNLOCK_VOLUME Деблокирует объем. FSCTL_WRITE_COMPRESSION Резервировался для будущего использования. IOCTL_DISK_CHECK_VERIFY Устаревший. Использование IOCTL_STORAGE_CHECK_VERIFY IOCTL_DISK_EJECT_MEDIA Устаревший. Использование IOCTL_STORAGE_EJECT_MEDIA IOCTL_DISK_FORMAT_TRACKS Форматирует непрерывную установку дисковых дорожек. IOCTL_DISK_GET_DRIVE_GEOMETRY Получает информацию о физической дисковой геометрии. IOCTL_DISK_GET_DRIVE_LAYOUT Обеспечивает информацию о каждом разделе на диске. IOCTL_DISK_GET_MEDIA_TYPES Устаревший. Использование IOCTL_STORAGE_GET_MEDIA_TYPES IOCTL_DISK_GET_PARTITION_INFO Получает дисковую информацию раздела. IOCTL_DISK_LOAD_MEDIA Устаревший. Использование IOCTL_STORAGE_LOAD_MEDIA IOCTL_DISK_MEDIA_REMOVAL Устаревший. Использование IOCTL_STORAGE_MEDIA_REMOVAL IOCTL_DISK_PERFORMANCE Обеспечивает дисковую информацию исполнения. IOCTL_DISK_REASSIGN_BLOCKS Отображает дисковых блоков в свободное-блочное пул. IOCTL_DISK_SET_DRIVE_LAYOUT Разделяет диск. IOCTL_DISK_SET_PARTITION_INFO Устанавливает дисковый тип раздела. IOCTL_DISK_VERIFY Выполняет логический формат дисковой протяженности. IOCTL_SERIAL_LSRMST_INSERT Приспосабливается или выводит из строя размещение строки и данных статуса модема в поток данных. IOCTL_STORAGE_CHECK_VERIFY Проверяет на наличие изменения в сменном носителе устройства. IOCTL_STORAGE_EJECT_MEDIA Извлекает носителя с устройства SCSI. IOCTL_STORAGE_GET_MEDIA_TYPES Получает информацию о поддержке носителя. IOCTL_STORAGE_LOAD_MEDIA Загружает носителя на устройство. IOCTL_STORAGE_MEDIA_REMOVAL Приспосабливается или выводит из строя носителя извлекать механизм.
Для более подробной информации о каждом управляющем коде, смотри свою тему. В конкретном, каждая тема обеспечивает детали в использовании lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, и lpBytesReturned параметры.
lpInBuffer
Указатель в буфер, который содержит данные требовавшееся, чтобы выполнять операцию. Этот параметр может быть НЕДЕЙСТВИТЕЛЕН если параметр dwIoControlCode определяет операцию, что не требует входные данные.
nInBufferSize
Определяет размер, в байтах, буфера указанного, чтобы lpInBuffer.
lpOutBuffer
Указатель в буфер, который получает операцию выходных данных. Этот параметр может быть НЕДЕЙСТВИТЕЛЕН если параметр dwIoControlCode определяет операцию, что не производит выходные данные.
nOutBufferSize
Определяет размер, в байтах, буфера указанного, чтобы lpOutBuffer.
lpBytesReturned
Указатель в переменную, которая получает размер, в байтах, данных загруженных в буфер указанных, чтобы lpOutBuffer. Если lpOverlapped, - НЕДЕЙСТВИТЕЛЬНО, lpBytesReturned не мочь быть НЕДЕЙСТВИТЕЛЬНО. Даже когда операция не производит никакие выходные данные, и lpOutBuffer может быть НЕДЕЙСТВИТЕЛЕН, функция DeviceIoControl использует переменную указанную, чтобы lpBytesReturned. После такой операции, величина переменной - не означая. Если lpOverlapped, - не НЕДЕЙСТВИТЕЛЬНО, lpBytesReturned может быть НЕДЕЙСТВИТЕЛЬНО. Если это - перекрытая операция, Вы можете возвращать количество байтов вызовом GetOverlappedResult. Если hDevice связан портом завершения В/В, Вы можете возвращать количество байтов вызовом GetQueuedCompletionStatus.
lpOverlapped
Указатель в ПЕРЕКРЫТУЮ структуру. Если hDevice был открыт флагом FILE_FLAG_OVERLAPPED, этот параметр должен указать на правильную ПЕРЕКРЫТУЮ структуру. В этом случае, DeviceIoControl выполнен как перекрытая операция (асинхронная). Если устройство было открыто FILE_FLAG_OVERLAPPED и lpOverlapped НЕДЕЙСТВИТЕЛЬНО, функция терпит неудачу в непредсказуемых путях. Если hDevice не был открыт определяя флаг FILE_FLAG_OVERLAPPED, этот параметр проигнорирован и функция DeviceIoControl не возвращается пока операция не завершена, или ошибка происходит.
Обратные Величины
Если функция добивается успеха, обратная величина ненулевая. Если функция терпит неудачу, обратная величина нулевая. Для того, чтобы расширять информацию ошибки, назовите GetLastError.
Замечания
Если hDevice был открыт FILE_FLAG_OVERLAPPED и lpOverlapped параметр указывает на ПЕРЕКРЫТУЮ структуру, DeviceIoControl выполнен как перекрытая операция (асинхронная). В этом случае, ПЕРЕКРЫТАЯ структура должна содержать ручку в руководство-восстановившее объект события создавался вызовом в функцию CreateEvent. Более подробно в руководстве-восстановившем объекты события, смотри Синхронизацию. Если перекрытая операция не может завершаться немедленно, функция возвращает ЛОЖЬ, и возврат GetLastError ERROR_IO_PENDING, указывая, что операция выполняется на фоне. Когда это случается, операционная система устанавливает объект события в ПЕРЕКРЫТОЙ структуре в nonsignaled состояние перед возврат DeviceIoControl. Система затем устанавливает объект события против сигнального состояния когда операция завершена. Вызов резьбы может использовать любую из функций ожидания, чтобы ждать объект события против сигнализирован, затем использовать функцию GetOverlappedResult, чтобы определять результаты операции. Функция GetOverlappedResult сообщает успех или неудачу операции и количество байтов возвращалось в буфер lpOutBuffer.
Смотри Также
CreateEvent, CreateFile, GetOverlappedResult, GetQueuedCompletionStatus, ПЕРЕКРЫТОЕ
|
|
|
|
| |