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


IOCTL_SFFDISK_DEVICE_PASSWORD IOCTL (sffdisk.h)

Приложения в пользовательском режиме используют этот IOCTL для выполнения основных операций с карта Secure Digital (SD), таких как установка пароля на карта, сброс карта или блокировка и разблокировка карта. Описание этой команды см. в спецификации 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_DEVICE_PASSWORD для этой операции.
lpInBuffer
Указатель на входной буфер. Вызывающий объект должен инициализировать структуру SFFDISK_DEVICE_PASSWORD_DATA и сохранить ее в начале буфера. Сразу после структуры SFFDISK_DEVICE_PASSWORD_DATA вызывающий объект должен передать строки с завершением NULL для старого и нового паролей. В первую очередь используется текущий (старый) пароль, за которым сразу же следует новый пароль.
nInBufferSize
Указывает размер входного буфера в байтах, на который указывает параметр lpInBuffer . Размер входного буфера должен быть суммой sizeof(SFFDISK_DEVICE_PASSWORD_DATA) и размером в байтах следующих за ним сведений о пароле.
lpOutBuffer
Указатель на выходной буфер, содержащий результаты операции. Если операция завершается сбоем и 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

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

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

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

Требования

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