IOCTL_SFFDISK_QUERY_DEVICE_PROTOCOL IOCTL (sffdisk.h)
Приложения пользовательского режима используют этот IOCTL для получения значения протокола, определяющего карта как карта SD или MMC карта. Описание этой команды см. в спецификации Secure Digital I/O (SDIO).
Для выполнения этой операции вызовите функцию DeviceIoControl (описанную в документации по Microsoft Windows SDK), используя следующие параметры.
bRet = DeviceIoControl (
(HANDLE) hDevice,
(DWORD) dwIoControlCode,
(PUCHAR) lpInBuffer,
(DWORD) nInBufferSize,
(PUCHAR) lpOutBuffer,
(DWORD) nOutBufferSize,
(LPDWORD) lpBytesReturned,
(LPOVERLAPPED) lpOverlapped
);
Параметры
- hDevice
- Дескриптор тома в стеке SD.
- dwIoControlCode
- Содержит код элемента управления для операции. Это значение определяет конкретную операцию, которую необходимо выполнить, и тип устройства, на котором она выполняется. Используйте IOCTL_SFFDISK_QUERY_DEVICE_PROTOCOL для этой операции.
- lpInBuffer
- Не используется с этим IOCTL. Вызывающий объект должен передавать значение NULL.
- nInBufferSize
- Не используется с этим IOCTL. Вызывающий объект должен передавать значение 0.
- lpOutBuffer
- Указатель на структуру SFFDISK_QUERY_DEVICE_PROTOCOL_DATA в предоставленном пользователем буфере, содержающем результаты. Элемент ProtocolGUID структуры SFFDISK_QUERY_DEVICE_PROTOCOL_DATA содержит GUID, который идентифицирует карта как карта SD или mmc карта. Если операция завершается сбоем и GetLastError возвращает код ошибки STATUS_BUFFER_TOO_SMALL, выходной буфер не был достаточно велик для хранения результатов.
- nOutBufferSize
- Содержит размер (в байтах) выходного буфера, на который указывает параметр lpOutBuffer .
- lpBytesReturned
-
Указатель на переменную, которая получает размер в байтах данных результатов, хранящихся в буфере, на который указывает lpOutBuffer.
Если выходной буфер слишком мал для хранения возвращаемых данных, то он будет содержать нулевое значение для выходных данных, вызов завершится ошибкой, а GetLastError вернет код ошибки ERROR_INSUFFICIENT_BUFFER. В случае.
Если lpOverlapped имеет значение NULL (неперекрытый ввод-вывод), вызывающий объект не может назначить значение NULL параметру lpBytesReturned для входных данных. Если lpOverlapped не имеет значения NULL (перекрывающийся ввод-вывод), вызывающий объект может назначить значение NULL параметру lpBytesReturned .
Если эта операция перекрывается, можно получить количество возвращаемых байтов, вызвав функцию GetOverlappedResult . Если hDevice связан с портом завершения ввода-вывода, можно получить количество возвращаемых байтов, вызвав функцию GetQueuedCompletionStatus . Описание функций GetOverlappedResult и GetQueuedCompletionStatus см. в документации windows SDK.
- lpOverlapped
-
Указатель на структуру OVERLAPPED, как описано в документации windows SDK.
Если вызывающий объект открыл устройство с флагом FILE_FLAG_OVERLAPPED, lpOverlapped должен указывать на допустимую структуру OVERLAPPED. В этом случае система выполняет DeviceIoControl как перекрываемую асинхронную операцию. Если вызывающий объект открыл устройство с флагом FILE_FLAG_OVERLAPPED, а lpOverlapped имеет значение NULL, функция завершается непредсказуемым сбоем.
Если вызывающий объект открыл устройство без указания флага FILE_FLAG_OVERLAPPED, система игнорирует значение в lpOverlapped, а функция DeviceIoControl не возвращается до завершения операции или до возникновения ошибки.
Основной код
Входной буфер
TBD
Выходной буфер
TBD
Длина выходного буфера
TBD
Буфер входных и выходных данных
TBD
Длина входного/выходного буфера
TBD
Блок состояния
Если операция выполнена успешно, DeviceIoControl возвращает ненулевое значение.
Если операция завершается сбоем, DeviceIoControl возвращает ноль. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Требования
Требование | Значение |
---|---|
Заголовок | sffdisk.h (включая Sffdisk.h) |