Поделиться через


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 не возвращается до завершения операции или до возникновения ошибки.

Основной код

IRP_MJ_DEVICE_CONTROL

Входной буфер

TBD

Выходной буфер

TBD

Длина выходного буфера

TBD

Буфер входных и выходных данных

TBD

Длина входного/выходного буфера

TBD

Блок состояния

Если операция выполнена успешно, DeviceIoControl возвращает ненулевое значение.

Если операция завершается сбоем, DeviceIoControl возвращает ноль. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Требования

Требование Значение
Заголовок sffdisk.h (включая Sffdisk.h)