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


Функция SetupGetFileCompressionInfoA (setupapi.h)

[Эта функция доступна для использования в операционных системах, указанных в разделе Требования. В последующих версиях он может быть изменен или недоступен. SetupAPI больше не следует использовать для установки приложений. Вместо этого используйте установщик Windows для разработки установщиков приложений. SetupAPI по-прежнему используется для установки драйверов устройств.]

Функция SetupGetFileCompressionInfo проверяет физический файл, чтобы определить, сжимается ли он, и получает полный путь, размер и размер несжатого целевого файла.

Обратите внимание, что эта функция устарела и была заменена setupGetFileCompressionInfoEx. Не используйте SetupGetFileCompressionInfo, а всегда используйте SetupGetFileCompressionInfoEx.

Синтаксис

WINSETUPAPI DWORD SetupGetFileCompressionInfoA(
  [in]      PCSTR  SourceFileName,
  [in, out] PSTR   *ActualSourceFileName,
  [in, out] PDWORD SourceFileSize,
  [in, out] PDWORD TargetFileSize,
  [in, out] PUINT  CompressionType
);

Параметры

[in] SourceFileName

Имя файла, о котором требуются сведения. Если файл не найден на исходном носителе точно так же, как имя, выполняется поиск файла с двумя альтернативными именами сжатой формы. Например, если файл F:\x86\cmd.exe и он не найден, выполняется поиск F:\mpis\cmd.ex_, а если он не найден, выполняется поиск по F:\x86\cmd.ex$. Следует использовать строку со значением NULL.

[in, out] ActualSourceFileName

Указатель на переменную, получающую полный путь к файлу, который удалось найти. Вызывающий объект может освободить указатель с помощью вызова LocalFree. Путь действителен, только если функция возвращает NO_ERROR. Обратите внимание, что если версия SetupAPI.dll меньше 5.0.2195, вызывающий объект должен использовать экспортированную функцию MyFree из SetupAPI, чтобы освободить память, выделенную этой функцией, а не с помощью LocalFree. См. раздел «Примечания».

[in, out] SourceFileSize

Указатель на переменную, в которой эта функция возвращает размер файла в его текущей форме, которая является текущим размером файла с именем ActualSourceFileName. Размер определяется путем изучения исходного файла; он не извлекается из INF-файла. Размер исходного файла действителен, только если функция возвращает NO_ERROR.

[in, out] TargetFileSize

Указатель на переменную, в которой эта функция возвращает размер, который будет занимать файл при распаковке или копировании. Если файл не сжат, это значение будет таким же, как SourceFileSize. Размер определяется путем изучения файла; он не извлекается из INF-файла. Размер целевого файла действителен, только если функция возвращает NO_ERROR.

[in, out] CompressionType

Указатель на переменную, в которой эта функция возвращает значение, указывающее тип сжатия, используемого в ActualSourceFileName. Тип сжатия действителен, только если функция возвращает NO_ERROR. Значение может быть одним из следующих флагов.

FILE_COMPRESSION_NONE

Исходный файл не сжимается с помощью распознанного алгоритма сжатия.

FILE_COMPRESSION_WINLZA

Исходный файл сжимается со сжатием LZ.

FILE_COMPRESSION_MSZIP

Исходный файл сжимается со сжатием MSZIP.

Возвращаемое значение

Функция возвращает код системной ошибки , указывающий результат поиска файла. Код ошибки может быть одним из следующих значений.

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

Комментарии

Не используйте SetupGetFileCompressionInfo, а всегда используйте SetupGetFileCompressionInfoEx.

Так как SetupGetFileCompressionInfo определяет сжатие путем ссылки на физический файл, приложение установки должно убедиться, что файл присутствует перед вызовом SetupGetFileCompressionInfo.

Обратите внимание, что если версия SetupAPI.dll меньше 5.0.2195, вызывающий объект должен использовать экспортированную функцию MyFree из SetupAPI, чтобы освободить память, выделенную этой функцией, а не с помощью LocalFree. Если вызов LocalFree вызывает нарушение доступа, проблему следует решить с помощью MyFree.

Ниже приведен пример получения функции MyFree из SetupAPI.dll:

typedef VOID (WINAPI* MYFREEFUNC)(LPVOID lpBuff);
   MYFREEFUNC MyFree;

   HMODULE hDll=NULL;
   hDll = GetModuleHandle("SETUPAPI.DLL");
   MyFree = (MYFREEFUNC)GetProcAddress(hDll, "MyFree");
   ...
   other code here to prepare file queue
   ...
   PTSTR lpActualSourceFileName;
   SetupGetFileCompressionInfo(...,&lpActualSourceFileName,...,...,...);
   ...
   MyFree(lpActualSourceFileName); 

Примечание

Заголовок setupapi.h определяет SetupGetFileCompressionInfo в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header setupapi.h
Библиотека Setupapi.lib
DLL Setupapi.dll

См. также

Функции

Обзор

SetupDecompressOrCopyFile