25 #define SEEK_CURRENT 1 47 #define CAB_SIGNATURE 0x4643534D // "MSCF" 48 #define CAB_VERSION 0x0103 49 #define CAB_BLOCKSIZE 32768 51 #define CAB_COMP_MASK 0x00FF 52 #define CAB_COMP_NONE 0x0000 53 #define CAB_COMP_MSZIP 0x0001 54 #define CAB_COMP_QUANTUM 0x0002 55 #define CAB_COMP_LZX 0x0003 57 #define CAB_FLAG_HASPREV 0x0001 58 #define CAB_FLAG_HASNEXT 0x0002 59 #define CAB_FLAG_RESERVE 0x0004 61 #define CAB_ATTRIB_READONLY 0x0001 62 #define CAB_ATTRIB_HIDDEN 0x0002 63 #define CAB_ATTRIB_SYSTEM 0x0004 64 #define CAB_ATTRIB_VOLUME 0x0008 65 #define CAB_ATTRIB_DIRECTORY 0x0010 66 #define CAB_ATTRIB_ARCHIVE 0x0020 67 #define CAB_ATTRIB_EXECUTE 0x0040 68 #define CAB_ATTRIB_UTF_NAME 0x0080 70 #define CAB_FILE_MAX_FOLDER 0xFFFC 71 #define CAB_FILE_CONTINUED 0xFFFD 72 #define CAB_FILE_SPLIT 0xFFFE 73 #define CAB_FILE_PREV_NEXT 0xFFFF 200 *InputLength = *OutputLength =
Len;
212 #define MSZIP_MAGIC 0x4B43 235 DPRINT(
"MSZipCodecUncompress(OutputBuffer = %x, InputBuffer = %x, " 239 if (*InputLength > 0)
245 DPRINT(
"Bad MSZIP block header magic (0x%X)\n", Magic);
250 Codec->ZStream.avail_in = *InputLength - 2;
252 Codec->ZStream.avail_out =
abs(*OutputLength);
265 Codec->ZStream.total_in = 2;
269 Codec->ZStream.avail_in = -*InputLength;
272 Codec->ZStream.avail_out =
abs(*OutputLength);
273 Codec->ZStream.total_in = 0;
276 Codec->ZStream.total_out = 0;
280 DPRINT(
"inflate() returned (%d) (%s)\n",
Status, Codec->ZStream.msg);
286 if (*OutputLength > 0)
296 *InputLength = Codec->ZStream.total_in;
297 *OutputLength = Codec->ZStream.total_out;
356 if (lpFileTime ==
NULL)
457 DPRINT(
"NtQueryInformationFile() failed (%x)\n", NtStatus);
470 DPRINT(
"NtSetInformationFile() failed (%x)\n", NtStatus);
486 if (CabinetContext->FileBuffer)
489 NtClose(CabinetContext->FileSectionHandle);
490 NtClose(CabinetContext->FileHandle);
491 CabinetContext->FileBuffer =
NULL;
506 CabinetContext->FileOpen =
FALSE;
507 wcscpy(CabinetContext->DestPath,
L"");
509 CabinetContext->CodecSelected =
FALSE;
512 CabinetContext->OverwriteHandler =
NULL;
513 CabinetContext->ExtractHandler =
NULL;
514 CabinetContext->DiskChangeHandler =
NULL;
516 CabinetContext->FolderUncompSize = 0;
517 CabinetContext->BytesLeftInBlock = 0;
518 CabinetContext->CabinetReserved = 0;
519 CabinetContext->FolderReserved = 0;
520 CabinetContext->DataReserved = 0;
521 CabinetContext->CabinetReservedArea =
NULL;
522 CabinetContext->LastFileOffset = 0;
553 if (
n != 0 &&
Path[
n - 1] !=
L'\\' &&
Ok)
571 return CabinetContext->CabinetName;
597 wcscpy(CabinetContext->DestPath, DestinationPath);
599 if (
wcslen(CabinetContext->DestPath) > 0)
612 return CabinetContext->DestPath;
633 if (CabinetContext->FileOpen)
636 DPRINT(
"CabinetOpen returning SUCCESS\n");
647 NtStatus =
NtOpenFile(&CabinetContext->FileHandle,
656 DPRINT1(
"Cannot open file (%S) (%x)\n", CabinetContext->CabinetName, NtStatus);
660 CabinetContext->FileOpen =
TRUE;
667 CabinetContext->FileHandle);
671 DPRINT1(
"NtCreateSection failed for %ls: %x\n", CabinetContext->CabinetName, NtStatus);
675 CabinetContext->FileBuffer = 0;
676 CabinetContext->FileSize = 0;
680 (
PVOID*)&CabinetContext->FileBuffer,
682 &CabinetContext->FileSize,
689 DPRINT1(
"NtMapViewOfSection failed: %x\n", NtStatus);
693 DPRINT(
"Cabinet file %S opened and mapped to %x\n",
694 CabinetContext->CabinetName, CabinetContext->FileBuffer);
695 CabinetContext->PCABHeader = (
PCFHEADER)CabinetContext->FileBuffer;
698 if (CabinetContext->FileSize <=
sizeof(
CFHEADER) ||
700 CabinetContext->PCABHeader->Version !=
CAB_VERSION ||
701 CabinetContext->PCABHeader->FolderCount == 0 ||
702 CabinetContext->PCABHeader->FileCount == 0 ||
703 CabinetContext->PCABHeader->FileTableOffset <
sizeof(
CFHEADER))
706 DPRINT1(
"File has invalid header\n");
717 CabinetContext->FolderReserved = *
Buffer;
719 CabinetContext->DataReserved = *
Buffer;
722 if (CabinetContext->CabinetReserved > 0)
724 CabinetContext->CabinetReservedArea =
Buffer;
725 Buffer += CabinetContext->CabinetReserved;
733 wcscpy(CabinetContext->CabinetPrev, CabinetContext->CabinetName);
753 wcscpy(CabinetContext->CabinetPrev,
L"");
754 wcscpy(CabinetContext->DiskPrev,
L"");
761 wcscpy(CabinetContext->CabinetNext, CabinetContext->CabinetName);
781 wcscpy(CabinetContext->CabinetNext,
L"");
782 wcscpy(CabinetContext->DiskNext,
L"");
786 DPRINT(
"CabinetOpen returning SUCCESS\n");
797 if (!CabinetContext->FileOpen)
801 CabinetContext->FileOpen =
FALSE;
842 if (
wcscmp(Search->Cabinet, CabinetContext->CabinetName) != 0)
851 Search->File = (
PCFFILE)(CabinetContext->FileBuffer + CabinetContext->PCABHeader->FileTableOffset);
861 if (Search->File->FolderIndex == 0xFFFD ||
862 Search->File->FolderIndex == 0xFFFF)
865 DPRINT(
"Skipping file (%s): FileOffset (0x%X), " 866 "LastFileOffset (0x%X)\n", (
char *)(Search->File + 1),
867 Search->File->FileOffset, CabinetContext->LastFileOffset);
872 if (Search->File != Prev)
876 Search->CFData =
NULL;
881 if (
wcscmp(Search->Search,
L"*") == 0)
903 if (Search->Index >= CabinetContext->PCABHeader->FileCount)
906 DPRINT(
"End of cabinet reached\n");
910 Search->File = (
PCFFILE)(
strchr((
char *)(Search->File + 1), 0) + 1);
913 DPRINT(
"Found file %s\n", Search->File->FileName);
931 DPRINT(
"CabinetFindNextFileSequential(FileName = %S)\n",
FileName);
962 PVOID DestFileBuffer;
963 PVOID CurrentDestBuffer;
976 LONG InputLength, OutputLength;
979 if (
wcscmp(Search->Cabinet, CabinetContext->CabinetName) != 0)
982 DPRINT(
"File is not in this cabinet (%S != %S)\n",
983 Search->Cabinet, CabinetContext->CabinetName);
988 if (Search->File->FolderIndex == 0xFFFD ||
989 Search->File->FolderIndex == 0xFFFF)
995 else if (Search->File->FolderIndex == 0xFFFE)
998 CurrentFolder = &CabinetContext->CabinetFolders[CabinetContext->PCABHeader->FolderCount - 1];
1003 CurrentFolder = &CabinetContext->CabinetFolders[Search->File->FolderIndex];
1018 DPRINT(
"Extracting file at uncompressed offset (0x%X) Size (%d bytes)\n",
1019 (
UINT)Search->File->FileOffset, (
UINT)Search->File->FileSize);
1021 if (CabinetContext->CreateFileHandler)
1024 CurrentDestBuffer = CabinetContext->CreateFileHandler(CabinetContext, Search->File->FileSize);
1025 if (!CurrentDestBuffer)
1027 DPRINT1(
"CreateFileHandler() failed\n");
1034 wcscpy(DestName, CabinetContext->DestPath);
1061 DPRINT(
"NtCreateFile() failed (%S) (%x)\n", DestName, NtStatus);
1064 if (CabinetContext->OverwriteHandler ==
NULL ||
1065 CabinetContext->OverwriteHandler(CabinetContext, Search->File, DestName))
1081 DPRINT1(
"NtCreateFile() failed (%S) (%x)\n", DestName, NtStatus);
1087 DPRINT1(
"File (%S) exists\n", DestName);
1092 MaxDestFileSize.
QuadPart = Search->File->FileSize;
1103 DPRINT1(
"NtCreateSection failed for %ls: %x\n", DestName, NtStatus);
1109 CabinetContext->DestFileSize = 0;
1114 &CabinetContext->DestFileSize,
1121 DPRINT1(
"NtMapViewOfSection failed: %x\n", NtStatus);
1123 goto CloseDestFileSection;
1126 CurrentDestBuffer = DestFileBuffer;
1128 Search->File->FileTime,
1131 DPRINT1(
"DosDateTimeToFileTime() failed\n");
1143 DPRINT(
"NtQueryInformationFile() failed (%x)\n", NtStatus);
1156 DPRINT(
"NtSetInformationFile() failed (%x)\n", NtStatus);
1164 if (CabinetContext->ExtractHandler !=
NULL)
1165 CabinetContext->ExtractHandler(CabinetContext, Search->File, DestName);
1168 CFData = Search->CFData;
1170 CFData = (
PCFDATA)(CabinetContext->CabinetFolders[Search->File->FolderIndex].DataOffset + CabinetContext->FileBuffer);
1172 CurrentOffset = Search->Offset;
1173 while (CurrentOffset + CFData->
UncompSize <= Search->File->FileOffset)
1178 CFData = (
PCFDATA)((
char *)(CFData + 1) + CabinetContext->DataReserved + CFData->
CompSize);
1181 Search->CFData = CFData;
1182 Search->Offset = CurrentOffset;
1188 CurrentBuffer = ((
unsigned char *)(CFData + 1)) + CabinetContext->DataReserved;
1190 InputLength = RemainingBlock;
1192 while (CurrentOffset < Search->
File->FileOffset)
1196 OutputLength = Search->File->FileOffset - CurrentOffset;
1197 if (OutputLength > (
LONG)
sizeof(Chunk))
1198 OutputLength =
sizeof(Chunk);
1201 OutputLength = -OutputLength;
1203 CabinetContext->Codec->Uncompress(CabinetContext->Codec,
1210 CurrentOffset += OutputLength;
1214 RemainingBlock -= InputLength;
1216 InputLength = -RemainingBlock;
1223 Size = Search->File->FileSize;
1226 OutputLength =
Size;
1227 DPRINT(
"Decompressing block at %x with RemainingBlock = %d, Size = %d\n",
1230 Status = CabinetContext->Codec->Uncompress(CabinetContext->Codec,
1237 DPRINT(
"Cannot uncompress block\n");
1245 CurrentDestBuffer = (
PVOID)((
ULONG_PTR)CurrentDestBuffer + OutputLength);
1249 Size -= OutputLength;
1251 RemainingBlock -= InputLength;
1252 if (
Size > 0 && RemainingBlock == 0)
1255 DPRINT(
"Out of block data\n");
1258 CurrentBuffer = (
unsigned char *)(CFData + 1) + CabinetContext->DataReserved;
1259 InputLength = RemainingBlock;
1266 if (!CabinetContext->CreateFileHandler)
1269 CloseDestFileSection:
1270 if (!CabinetContext->CreateFileHandler)
1274 if (!CabinetContext->CreateFileHandler)
1290 if (CabinetContext->CodecSelected)
1292 if (
Id == CabinetContext->CodecId)
1295 CabinetContext->CodecSelected =
FALSE;
1310 CabinetContext->Codec->ZStream.zfree =
MSZipFree;
1311 CabinetContext->Codec->ZStream.opaque = (
voidpf)0;
1319 CabinetContext->CodecId =
Id;
1320 CabinetContext->CodecSelected =
TRUE;
1338 CabinetContext->OverwriteHandler = Overwrite;
1339 CabinetContext->ExtractHandler =
Extract;
1340 CabinetContext->DiskChangeHandler = DiskChange;
1341 CabinetContext->CreateFileHandler =
CreateFile;
1352 if (CabinetContext->CabinetReservedArea !=
NULL)
1356 *
Size = CabinetContext->CabinetReserved;
1359 return CabinetContext->CabinetReservedArea;
VOID CabinetInitialize(IN OUT PCABINET_CONTEXT CabinetContext)
static ACPI_BUFFER CurrentBuffer
#define CAB_STATUS_INVALID_CAB
struct _CFHEADER CFHEADER
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
PCWSTR CabinetGetCabinetName(IN PCABINET_CONTEXT CabinetContext)
VOID(* PCABINET_EXTRACT)(IN struct _CABINET_CONTEXT *CabinetContext, IN PCFFILE File, IN PCWSTR FileName)
static ULONG CloseCabinet(IN PCABINET_CONTEXT CabinetContext)
ULONG CabinetExtractFile(IN PCABINET_CONTEXT CabinetContext, IN PCAB_SEARCH Search)
NTSTATUS NTAPI NtUnmapViewOfSection(IN HANDLE ProcessHandle, IN PVOID BaseAddress)
void __cdecl free(void *ptr)
static CAB_CODEC MSZipCodec
_In_ ULONG _In_ ULONG _In_ ULONG Length
NTSTATUS NTAPI NtSetInformationFile(HANDLE hFile, PIO_STATUS_BLOCK io, PVOID ptr, ULONG len, FILE_INFORMATION_CLASS FileInformationClass)
static BOOL ConvertSystemTimeToFileTime(CONST SYSTEMTIME *lpSystemTime, LPFILETIME lpFileTime)
NTSTATUS NTAPI NtCreateSection(OUT PHANDLE SectionHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN PLARGE_INTEGER MaximumSize OPTIONAL, IN ULONG SectionPageProtection OPTIONAL, IN ULONG AllocationAttributes, IN HANDLE FileHandle OPTIONAL)
#define OBJ_CASE_INSENSITIVE
VOID CabinetSelectCodec(IN PCABINET_CONTEXT CabinetContext, IN ULONG Id)
static PWCHAR GetFileName(PWCHAR Path)
ULONG RawCodecUncompress(IN OUT PCAB_CODEC Codec, OUT PVOID OutputBuffer, IN PVOID InputBuffer, IN OUT PLONG InputLength, IN OUT PLONG OutputLength)
IN BOOLEAN OUT PSTR Buffer
#define FILE_ATTRIBUTE_SYSTEM
VOID CabinetClose(IN OUT PCABINET_CONTEXT CabinetContext)
VOID(* PCABINET_DISK_CHANGE)(IN struct _CABINET_CONTEXT *CabinetContext, IN PCWSTR CabinetName, IN PCWSTR DiskLabel)
struct _CAB_CODEC CAB_CODEC
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
IN PVOID IN PVOID IN USHORT IN USHORT Size
static BOOL ConvertDosDateTimeToFileTime(WORD wFatDate, WORD wFatTime, LPFILETIME lpFileTime)
PCWSTR CabinetGetDestinationPath(IN PCABINET_CONTEXT CabinetContext)
HRESULT WINAPI Extract(SESSION *dest, LPCSTR szCabName)
#define CAB_ATTRIB_SYSTEM
#define CAB_ATTRIB_HIDDEN
struct _DOSDATE * PDOSDATE
WDF_EXTERN_C_START typedef _Must_inspect_result_ _In_opt_ PCUNICODE_STRING UnicodeString
PVOID(* PCABINET_CREATE_FILE)(IN struct _CABINET_CONTEXT *CabinetContext, IN ULONG FileSize)
VOID CabinetSetCabinetName(IN PCABINET_CONTEXT CabinetContext, IN PCWSTR FileName)
struct _DOSTIME * PDOSTIME
NTSYSAPI VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString, PCSZ SourceString)
void *__cdecl malloc(size_t size)
#define SECTION_ALL_ACCESS
struct _CFFOLDER CFFOLDER
#define FILE_SYNCHRONOUS_IO_ALERT
#define CAB_STATUS_CANNOT_WRITE
NTSTATUS NTAPI NtMapViewOfSection(IN HANDLE SectionHandle, IN HANDLE ProcessHandle, IN OUT PVOID *BaseAddress, IN ULONG_PTR ZeroBits, IN SIZE_T CommitSize, IN OUT PLARGE_INTEGER SectionOffset OPTIONAL, IN OUT PSIZE_T ViewSize, IN SECTION_INHERIT InheritDisposition, IN ULONG AllocationType, IN ULONG Protect)
ULONG CabinetFindNext(IN PCABINET_CONTEXT CabinetContext, IN OUT PCAB_SEARCH Search)
#define CAB_STATUS_NOMEMORY
#define CAB_ATTRIB_DIRECTORY
#define CAB_ATTRIB_READONLY
static BOOL SetAttributesOnFile(PCFFILE File, HANDLE hFile)
struct _LARGE_INTEGER::@2284 u
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR OutputBuffer
#define NtCurrentProcess()
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
#define FILE_ATTRIBUTE_DIRECTORY
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
ULONG MSZipCodecUncompress(IN OUT PCAB_CODEC Codec, OUT PVOID OutputBuffer, IN PVOID InputBuffer, IN OUT PLONG InputLength, IN OUT PLONG OutputLength)
NTSYSAPI NTSTATUS NTAPI NtOpenFile(OUT PHANDLE phFile, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG ShareMode, IN ULONG OpenMode)
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR InputBuffer
#define CAB_STATUS_UNSUPPCOMP
NTSTATUS NTAPI NtCreateFile(OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock, IN PLARGE_INTEGER AllocationSize OPTIONAL, IN ULONG FileAttributes, IN ULONG ShareAccess, IN ULONG CreateDisposition, IN ULONG CreateOptions, IN PVOID EaBuffer OPTIONAL, IN ULONG EaLength)
#define NT_SUCCESS(StatCode)
ULONG CabinetFindNextFileSequential(IN PCABINET_CONTEXT CabinetContext, IN PCWSTR FileName, IN OUT PCAB_SEARCH Search)
static VOID RemoveFileName(PWCHAR Path)
ULONG(* PCABINET_CODEC_UNCOMPRESS)(IN struct _CAB_CODEC *Codec, OUT PVOID OutputBuffer, IN PVOID InputBuffer, IN OUT PLONG InputLength, IN OUT PLONG OutputLength)
#define CAB_STATUS_CANNOT_CREATE
#define FILE_ATTRIBUTE_READONLY
NTSYSAPI BOOLEAN WINAPI RtlValidateHeap(HANDLE, ULONG, LPCVOID)
PCABINET_CODEC_UNCOMPRESS Uncompress
VOID CabinetSetEventHandlers(IN PCABINET_CONTEXT CabinetContext, IN PCABINET_OVERWRITE Overwrite, IN PCABINET_EXTRACT Extract, IN PCABINET_DISK_CHANGE DiskChange, IN PCABINET_CREATE_FILE CreateFile)
void *__cdecl calloc(size_t nmemb, size_t size)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
#define CAB_STATUS_SUCCESS
struct _CFHEADER * PCFHEADER
#define FILE_ATTRIBUTE_ARCHIVE
#define FILE_ATTRIBUTE_NORMAL
int inflateEnd(z_streamp strm)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define memcpy(s1, s2, n)
ULONG CabinetOpen(IN OUT PCABINET_CONTEXT CabinetContext)
NTSTATUS NTAPI NtQueryInformationFile(HANDLE hFile, PIO_STATUS_BLOCK io, PVOID ptr, ULONG len, FILE_INFORMATION_CLASS FileInformationClass)
void MSZipFree(voidpf opaque, voidpf address)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
struct _FileName FileName
PRTL_UNICODE_STRING_BUFFER Path
_CRTIMP wchar_t *__cdecl wcsncpy(wchar_t *_Dest, const wchar_t *_Source, size_t _Count)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define CAB_ATTRIB_ARCHIVE
IN OUT PVCB OUT PDIRENT OUT PBCB IN BOOLEAN CreateFile
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
ULONG CabinetFindFirst(IN PCABINET_CONTEXT CabinetContext, IN PCWSTR FileName, IN OUT PCAB_SEARCH Search)
static BOOL CabinetNormalizePath(PWCHAR Path, ULONG Length)
static OUT PIO_STATUS_BLOCK IoStatusBlock
#define FILE_ATTRIBUTE_HIDDEN
#define inflateInit2(strm, windowBits)
char * strchr(const char *String, int ch)
PVOID CabinetGetCabinetReservedArea(IN PCABINET_CONTEXT CabinetContext, OUT PULONG Size)
#define FILE_SYNCHRONOUS_IO_NONALERT
struct _CFFOLDER * PCFFOLDER
#define CAB_STATUS_FILE_EXISTS
voidpf MSZipAlloc(voidpf opaque, uInt items, uInt size)
VOID CabinetSetDestinationPath(IN PCABINET_CONTEXT CabinetContext, IN PCWSTR DestinationPath)
static CAB_CODEC RawCodec
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
#define InitializeObjectAttributes(p, n, a, r, s)
#define CAB_STATUS_CANNOT_OPEN
int inflate(z_streamp strm, int flush)
BOOLEAN RtlTimeFieldsToTime(IN PTIME_FIELDS TimeFields, IN PLARGE_INTEGER Time)
static PTIME_FIELDS TimeFields
BOOL(* PCABINET_OVERWRITE)(IN struct _CABINET_CONTEXT *CabinetContext, IN PCFFILE File, IN PCWSTR FileName)
VOID CabinetCleanup(IN OUT PCABINET_CONTEXT CabinetContext)
struct _CAB_CODEC * PCAB_CODEC
#define CAB_STATUS_NOFILE
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes