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


IOCTL_SFFDISK_DEVICE_COMMAND IOCTL (sffdisk.h)

Приложения в пользовательском режиме используют этот IOCTL для отправки команд карта Secure Digital (SD) в sd-карта. Описание этих команд см. в спецификации физического уровня sd memory Card Part 1 и в спецификации безопасности SD-карты памяти, часть 3 .

Вызывающий объект должен заполнить структуру SFFDISK_DEVICE_COMMAND_DATA и передать ее в качестве параметра в вызов.

Для выполнения этой операции вызовите функцию 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_DEVICE_COMMAND.
lpInBuffer
Указатель на входной буфер. Вызывающий объект должен инициализировать структуру SFFDISK_DEVICE_COMMAND_DATA и хранить ее в начале буфера. Вызывающий объект должен хранить параметры, связанные с командой, в расположении сразу после структуры SFFDISK_DEVICE_COMMAND_DATA.
nInBufferSize
Указывает размер входного буфера в байтах, на который указывает параметр lpInBuffer . Размер входного буфера должен быть суммой sizeof(SFFDISK_DEVICE_COMMAND_DATA) и размером параметров команды, которые следуют за ним.
lpOutBuffer
Указатель на выходной буфер, содержащий результаты операции. Если операция завершается сбоем и GetLastError возвращает код ошибки ERROR_INSUFFICIENT_BUFFER, выходной буфер не был достаточно велик для хранения данных результатов.
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

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

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

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

Требования

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