Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Если драйверу необходимо использовать файлы, отличные от тех, которые предоставляются службой WIA во время передачи файлов, драйвер должен быть осторожным в расположении этих файлов и способах доступа к этим файлам. В частности, средства записи драйверов должны знать о разрешениях доступа к каталогам и файлам, которые они используют. Некоторые примеры того, когда драйверам может потребоваться чтение или запись собственных файлов, включают ведение журнала, калибровку и сохранение конфигурации.
Например, каталог %windir%\System32 доступен только для чтения для учетной записи LocalService , поэтому драйверы WIA обычно не могут открывать файлы для чтения или записи. Большинство каталогов доступны только для чтения для учетных записей LocalService , поэтому редко возникают проблемы, если драйверу требуется только чтение из файла. Однако проблемы с файлами возникают, когда драйверы пытаются создать или записать файлы в каталоги с ограниченным доступом.
Безопасное место для записи файлов, используемых только драйвером, находится в каталоге профиля пользователя. Обратите внимание, что пользователь в этом случае ссылается на учетную запись, под которой выполняется процесс, в котором размещается драйвер. В Windows XP это учетная запись LocalSystem , а в Microsoft Windows Server 2003 и более поздних версиях — учетная запись LocalService . Чтобы драйвер работал хорошо во всех версиях Windows, поддерживающих WIA, драйверы должны создавать личные файлы в каталоге %userprofile% .
В следующем примере кода показано, как драйвер WIA может использовать каталог %userprofile% .
#define MY_DRIVER_FILE_NAME_W L"%userprofile%\\MyDriverFile.ext";
HANDLE hMyDriverFile = INVALID_HANDLE_VALUE;
WCHAR wszFileName[MAX_PATH] = {L'\0'};
DWORD dwMaxChars = sizeof(wszExpandedName) /
sizeof(wszExpandedName[0]);
if (ExpandEnvironmentStringsW(MY_DRIVER_FILE_NAME_W,
wszFileName,
dwMaxChars))
{
//
// The %userprofile% environment variable is expanded, if
// there was an error and the variable is not found.
// In this case an error would be returned before creating the
// file. If the file is created blindly with the name
// L"%userprofile\\MyDriverFile.ext"
// a possibility exists that the file will be created in a
// different directory, e.g. the root.
//
hMyDriverFile =
CreateFileW(
wszFileName, // Contains file name and path
dwDesiredAccess, // E.g. GENERIC_WRITE
dwShareMode, // E.g. FILE_SHARE_WRITE
lpSecurityAttributes, // Don't forget to ACL your file
// appropriately!
dwCreationDisposition, // E.g. CREATE_ALWAYS
dwFlagsAndAttributes, // E.g. FILE_ATTRIBUTE_NORMAL
NULL); // Template file
if (hMyDriverFile != INVALID_HANDLE_VALUE)
{
// Success!
}
else
{
// Failed. Do error cleanup...
.
.
.
}
}
Если драйверу необходимо выполнить запись в файл, содержащийся в каталоге, отличном % от userprofile, он должен убедиться, что для этого файла или каталога заданы правильные разрешения. Обычно это означает, что учетной записи LocalService предоставлены соответствующие разрешения. В Windows XP служба WIA работает под учетной записью LocalSystem , которая входит в группу локальных администраторов и имеет значительно более высокие уровни доступа.
Общие файлы приложения WIA и драйвера WIA
Если драйверу и упакованное приложение требуется доступ на чтение и запись к общему файлу, рекомендуется поместить файл в профиль Все пользователи в подкаталоге каталога данных приложения (CSIDL_COMMON_APPDATA). Не забудьте задать соответствующие списки управления доступом в новом подкаталоге.