47#define CAB_SIGNATURE 0x4643534D
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;
634 if (CabinetContext->FileOpen)
637 DPRINT(
"CabinetOpen returning SUCCESS\n");
648 NtStatus =
NtOpenFile(&CabinetContext->FileHandle,
657 DPRINT1(
"Cannot open file (%S) (%x)\n", CabinetContext->CabinetName, NtStatus);
661 CabinetContext->FileOpen =
TRUE;
668 CabinetContext->FileHandle);
672 DPRINT1(
"NtCreateSection failed for %ls: %x\n", CabinetContext->CabinetName, NtStatus);
676 CabinetContext->FileBuffer = 0;
677 CabinetContext->FileSize = 0;
681 (
PVOID*)&CabinetContext->FileBuffer,
683 &CabinetContext->FileSize,
690 DPRINT1(
"NtMapViewOfSection failed: %x\n", NtStatus);
694 DPRINT(
"Cabinet file %S opened and mapped to %x\n",
695 CabinetContext->CabinetName, CabinetContext->FileBuffer);
696 CabinetContext->PCABHeader = (
PCFHEADER)CabinetContext->FileBuffer;
699 if (CabinetContext->FileSize <=
sizeof(
CFHEADER) ||
701 CabinetContext->PCABHeader->Version !=
CAB_VERSION ||
702 CabinetContext->PCABHeader->FolderCount == 0 ||
703 CabinetContext->PCABHeader->FileCount == 0 ||
704 CabinetContext->PCABHeader->FileTableOffset <
sizeof(
CFHEADER))
707 DPRINT1(
"File has invalid header\n");
718 CabinetContext->FolderReserved = *
Buffer;
720 CabinetContext->DataReserved = *
Buffer;
723 if (CabinetContext->CabinetReserved > 0)
725 CabinetContext->CabinetReservedArea =
Buffer;
726 Buffer += CabinetContext->CabinetReserved;
734 wcscpy(CabinetContext->CabinetPrev, CabinetContext->CabinetName);
757 wcscpy(CabinetContext->CabinetPrev,
L"");
758 wcscpy(CabinetContext->DiskPrev,
L"");
765 wcscpy(CabinetContext->CabinetNext, CabinetContext->CabinetName);
788 wcscpy(CabinetContext->CabinetNext,
L"");
789 wcscpy(CabinetContext->DiskNext,
L"");
793 DPRINT(
"CabinetOpen returning SUCCESS\n");
804 if (!CabinetContext->FileOpen)
808 CabinetContext->FileOpen =
FALSE;
849 if (
wcscmp(Search->Cabinet, CabinetContext->CabinetName) != 0)
858 Search->File = (
PCFFILE)(CabinetContext->FileBuffer + CabinetContext->PCABHeader->FileTableOffset);
868 if (Search->File->FolderIndex == 0xFFFD ||
869 Search->File->FolderIndex == 0xFFFF)
872 DPRINT(
"Skipping file (%s): FileOffset (0x%X), "
873 "LastFileOffset (0x%X)\n", (
char *)(Search->File + 1),
874 Search->File->FileOffset, CabinetContext->LastFileOffset);
879 if (Search->File != Prev)
883 Search->CFData =
NULL;
888 if (
wcscmp(Search->Search,
L"*") == 0)
910 if (Search->Index >= CabinetContext->PCABHeader->FileCount)
913 DPRINT(
"End of cabinet reached\n");
917 Search->File = (
PCFFILE)(
strchr((
char *)(Search->File + 1), 0) + 1);
920 DPRINT(
"Found file %s\n", Search->File->FileName);
938 DPRINT(
"CabinetFindNextFileSequential(FileName = %S)\n",
FileName);
969 PVOID DestFileBuffer;
970 PVOID CurrentDestBuffer;
983 LONG InputLength, OutputLength;
987 if (
wcscmp(Search->Cabinet, CabinetContext->CabinetName) != 0)
990 DPRINT(
"File is not in this cabinet (%S != %S)\n",
991 Search->Cabinet, CabinetContext->CabinetName);
996 if (Search->File->FolderIndex == 0xFFFD ||
997 Search->File->FolderIndex == 0xFFFF)
1003 else if (Search->File->FolderIndex == 0xFFFE)
1006 CurrentFolder = &CabinetContext->CabinetFolders[CabinetContext->PCABHeader->FolderCount - 1];
1011 CurrentFolder = &CabinetContext->CabinetFolders[Search->File->FolderIndex];
1026 DPRINT(
"Extracting file at uncompressed offset (0x%X) Size (%d bytes)\n",
1027 (
UINT)Search->File->FileOffset, (
UINT)Search->File->FileSize);
1029 if (CabinetContext->CreateFileHandler)
1032 CurrentDestBuffer = CabinetContext->CreateFileHandler(CabinetContext, Search->File->FileSize);
1033 if (!CurrentDestBuffer)
1035 DPRINT1(
"CreateFileHandler() failed\n");
1042 wcscpy(DestName, CabinetContext->DestPath);
1043 StringLength =
wcslen(DestName);
1070 DPRINT(
"NtCreateFile() failed (%S) (%x)\n", DestName, NtStatus);
1073 if (CabinetContext->OverwriteHandler ==
NULL ||
1074 CabinetContext->OverwriteHandler(CabinetContext, Search->File, DestName))
1090 DPRINT1(
"NtCreateFile() failed (%S) (%x)\n", DestName, NtStatus);
1096 DPRINT1(
"File (%S) exists\n", DestName);
1101 MaxDestFileSize.
QuadPart = Search->File->FileSize;
1112 DPRINT1(
"NtCreateSection failed for %ls: %x\n", DestName, NtStatus);
1118 CabinetContext->DestFileSize = 0;
1123 &CabinetContext->DestFileSize,
1130 DPRINT1(
"NtMapViewOfSection failed: %x\n", NtStatus);
1132 goto CloseDestFileSection;
1135 CurrentDestBuffer = DestFileBuffer;
1137 Search->File->FileTime,
1140 DPRINT1(
"DosDateTimeToFileTime() failed\n");
1152 DPRINT(
"NtQueryInformationFile() failed (%x)\n", NtStatus);
1165 DPRINT(
"NtSetInformationFile() failed (%x)\n", NtStatus);
1173 if (CabinetContext->ExtractHandler !=
NULL)
1174 CabinetContext->ExtractHandler(CabinetContext, Search->File, DestName);
1177 CFData = Search->CFData;
1179 CFData = (
PCFDATA)(CabinetContext->CabinetFolders[Search->File->FolderIndex].DataOffset + CabinetContext->FileBuffer);
1181 CurrentOffset = Search->Offset;
1182 while (CurrentOffset + CFData->
UncompSize <= Search->File->FileOffset)
1187 CFData = (
PCFDATA)((
char *)(CFData + 1) + CabinetContext->DataReserved + CFData->
CompSize);
1190 Search->CFData = CFData;
1191 Search->Offset = CurrentOffset;
1197 CurrentBuffer = ((
unsigned char *)(CFData + 1)) + CabinetContext->DataReserved;
1199 InputLength = RemainingBlock;
1201 while (CurrentOffset < Search->
File->FileOffset)
1205 OutputLength = Search->File->FileOffset - CurrentOffset;
1206 if (OutputLength > (
LONG)
sizeof(Chunk))
1207 OutputLength =
sizeof(Chunk);
1210 OutputLength = -OutputLength;
1212 CabinetContext->Codec->Uncompress(CabinetContext->Codec,
1219 CurrentOffset += OutputLength;
1223 RemainingBlock -= InputLength;
1225 InputLength = -RemainingBlock;
1232 Size = Search->File->FileSize;
1235 OutputLength =
Size;
1236 DPRINT(
"Decompressing block at %x with RemainingBlock = %d, Size = %d\n",
1239 Status = CabinetContext->Codec->Uncompress(CabinetContext->Codec,
1246 DPRINT(
"Cannot uncompress block\n");
1254 CurrentDestBuffer = (
PVOID)((
ULONG_PTR)CurrentDestBuffer + OutputLength);
1258 Size -= OutputLength;
1260 RemainingBlock -= InputLength;
1261 if (
Size > 0 && RemainingBlock == 0)
1264 DPRINT(
"Out of block data\n");
1267 CurrentBuffer = (
unsigned char *)(CFData + 1) + CabinetContext->DataReserved;
1268 InputLength = RemainingBlock;
1275 if (!CabinetContext->CreateFileHandler)
1278CloseDestFileSection:
1279 if (!CabinetContext->CreateFileHandler)
1283 if (!CabinetContext->CreateFileHandler)
1299 if (CabinetContext->CodecSelected)
1301 if (
Id == CabinetContext->CodecId)
1304 CabinetContext->CodecSelected =
FALSE;
1319 CabinetContext->Codec->ZStream.zfree =
MSZipFree;
1320 CabinetContext->Codec->ZStream.opaque = (
voidpf)0;
1328 CabinetContext->CodecId =
Id;
1329 CabinetContext->CodecSelected =
TRUE;
1347 CabinetContext->OverwriteHandler = Overwrite;
1348 CabinetContext->ExtractHandler =
Extract;
1349 CabinetContext->DiskChangeHandler = DiskChange;
1350 CabinetContext->CreateFileHandler =
CreateFile;
1361 if (CabinetContext->CabinetReservedArea !=
NULL)
1365 *
Size = CabinetContext->CabinetReserved;
1368 return CabinetContext->CabinetReservedArea;
NTSTATUS NTAPI NtUnmapViewOfSection(IN HANDLE ProcessHandle, IN PVOID BaseAddress)
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)
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)
static ACPI_BUFFER CurrentBuffer
PRTL_UNICODE_STRING_BUFFER Path
char * strchr(const char *String, int ch)
#define CAB_STATUS_NOFILE
#define CAB_STATUS_CANNOT_OPEN
#define CAB_STATUS_UNSUPPCOMP
#define CAB_STATUS_FILE_EXISTS
VOID(* PCABINET_DISK_CHANGE)(IN struct _CABINET_CONTEXT *CabinetContext, IN PCWSTR CabinetName, IN PCWSTR DiskLabel)
VOID(* PCABINET_EXTRACT)(IN struct _CABINET_CONTEXT *CabinetContext, IN PCFFILE File, IN PCWSTR FileName)
#define CAB_STATUS_NOMEMORY
#define CAB_STATUS_CANNOT_CREATE
#define CAB_STATUS_SUCCESS
#define CAB_STATUS_CANNOT_WRITE
BOOL(* PCABINET_OVERWRITE)(IN struct _CABINET_CONTEXT *CabinetContext, IN PCFFILE File, IN PCWSTR FileName)
PVOID(* PCABINET_CREATE_FILE)(IN struct _CABINET_CONTEXT *CabinetContext, IN ULONG FileSize)
#define CAB_STATUS_INVALID_CAB
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
static BOOL SetAttributesOnFile(PCFFILE File, HANDLE hFile)
struct _DOSTIME * PDOSTIME
ULONG CabinetOpen(IN OUT PCABINET_CONTEXT CabinetContext)
struct _CFFOLDER * PCFFOLDER
static BOOL ConvertDosDateTimeToFileTime(WORD wFatDate, WORD wFatTime, LPFILETIME lpFileTime)
struct _CFHEADER CFHEADER
ULONG RawCodecUncompress(IN OUT PCAB_CODEC Codec, OUT PVOID OutputBuffer, IN PVOID InputBuffer, IN OUT PLONG InputLength, IN OUT PLONG OutputLength)
#define CAB_ATTRIB_HIDDEN
PCWSTR CabinetGetDestinationPath(IN PCABINET_CONTEXT CabinetContext)
voidpf MSZipAlloc(voidpf opaque, uInt items, uInt size)
#define CAB_ATTRIB_READONLY
#define CAB_ATTRIB_DIRECTORY
static BOOL ConvertSystemTimeToFileTime(CONST SYSTEMTIME *lpSystemTime, LPFILETIME lpFileTime)
struct _CAB_CODEC CAB_CODEC
ULONG CabinetFindFirst(IN PCABINET_CONTEXT CabinetContext, IN PCWSTR FileName, IN OUT PCAB_SEARCH Search)
ULONG(* PCABINET_CODEC_UNCOMPRESS)(IN struct _CAB_CODEC *Codec, OUT PVOID OutputBuffer, IN PVOID InputBuffer, IN OUT PLONG InputLength, IN OUT PLONG OutputLength)
struct _CFFOLDER CFFOLDER
static CAB_CODEC RawCodec
VOID CabinetClose(IN OUT PCABINET_CONTEXT CabinetContext)
#define CAB_ATTRIB_SYSTEM
ULONG CabinetFindNext(IN PCABINET_CONTEXT CabinetContext, IN OUT PCAB_SEARCH Search)
void MSZipFree(voidpf opaque, voidpf address)
struct _DOSDATE * PDOSDATE
static PWCHAR GetFileName(PWCHAR Path)
static BOOL CabinetNormalizePath(PWCHAR Path, ULONG Length)
PCWSTR CabinetGetCabinetName(IN PCABINET_CONTEXT CabinetContext)
VOID CabinetSelectCodec(IN PCABINET_CONTEXT CabinetContext, IN ULONG Id)
ULONG MSZipCodecUncompress(IN OUT PCAB_CODEC Codec, OUT PVOID OutputBuffer, IN PVOID InputBuffer, IN OUT PLONG InputLength, IN OUT PLONG OutputLength)
PVOID CabinetGetCabinetReservedArea(IN PCABINET_CONTEXT CabinetContext, OUT PULONG Size)
struct _CAB_CODEC * PCAB_CODEC
ULONG CabinetExtractFile(IN PCABINET_CONTEXT CabinetContext, IN PCAB_SEARCH Search)
#define CAB_ATTRIB_ARCHIVE
static CAB_CODEC MSZipCodec
struct _CFHEADER * PCFHEADER
static VOID RemoveFileName(PWCHAR Path)
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 CabinetInitialize(IN OUT PCABINET_CONTEXT CabinetContext)
static ULONG CloseCabinet(IN PCABINET_CONTEXT CabinetContext)
VOID CabinetCleanup(IN OUT PCABINET_CONTEXT CabinetContext)
VOID CabinetSetCabinetName(IN PCABINET_CONTEXT CabinetContext, IN PCWSTR FileName)
VOID CabinetSetDestinationPath(IN PCABINET_CONTEXT CabinetContext, IN PCWSTR DestinationPath)
ULONG CabinetFindNextFileSequential(IN PCABINET_CONTEXT CabinetContext, IN PCWSTR FileName, IN OUT PCAB_SEARCH Search)
HRESULT WINAPI Extract(SESSION *dest, LPCSTR szCabName)
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define NT_SUCCESS(StatCode)
#define FILE_ATTRIBUTE_NORMAL
int inflate(z_streamp strm, int flush)
int inflateEnd(z_streamp strm)
BOOLEAN RtlTimeFieldsToTime(IN PTIME_FIELDS TimeFields, IN PLARGE_INTEGER Time)
struct _FileName FileName
#define FILE_SYNCHRONOUS_IO_NONALERT
#define FILE_SYNCHRONOUS_IO_ALERT
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
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
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define OBJ_CASE_INSENSITIVE
NTSYSAPI BOOLEAN WINAPI RtlValidateHeap(HANDLE, ULONG, LPCVOID)
#define memcpy(s1, s2, n)
static OUT PIO_STATUS_BLOCK IoStatusBlock
#define InitializeObjectAttributes(p, n, a, r, s)
static PTIME_FIELDS TimeFields
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)
#define FILE_ATTRIBUTE_READONLY
#define SECTION_ALL_ACCESS
#define FILE_ATTRIBUTE_HIDDEN
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
#define FILE_ATTRIBUTE_SYSTEM
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define NtCurrentProcess()
NTSYSAPI NTSTATUS NTAPI NtSetInformationFile(IN HANDLE hFile, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass)
NTSYSAPI NTSTATUS NTAPI NtQueryInformationFile(IN HANDLE hFile, OUT PIO_STATUS_BLOCK pIoStatusBlock, OUT PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
#define FILE_ATTRIBUTE_ARCHIVE
#define FILE_ATTRIBUTE_DIRECTORY
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)
NTSYSAPI VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString, PCSZ SourceString)
_In_ ULONG _In_ ULONG _In_ ULONG Length
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
_CRTIMP wchar_t *__cdecl wcsncpy(wchar_t *_Dest, const wchar_t *_Source, size_t _Count)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define inflateInit2(strm, windowBits)
PCABINET_CODEC_UNCOMPRESS Uncompress
#define RtlZeroMemory(Destination, Length)
struct _LARGE_INTEGER::@2272 u
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR OutputBuffer
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR InputBuffer