49#define CAB_SIGNATURE 0x4643534D
50#define CAB_VERSION 0x0103
51#define CAB_BLOCKSIZE 32768
53#define CAB_COMP_MASK 0x00FF
54#define CAB_COMP_NONE 0x0000
55#define CAB_COMP_MSZIP 0x0001
56#define CAB_COMP_QUANTUM 0x0002
57#define CAB_COMP_LZX 0x0003
59#define CAB_FLAG_HASPREV 0x0001
60#define CAB_FLAG_HASNEXT 0x0002
61#define CAB_FLAG_RESERVE 0x0004
63#define CAB_ATTRIB_READONLY 0x0001
64#define CAB_ATTRIB_HIDDEN 0x0002
65#define CAB_ATTRIB_SYSTEM 0x0004
66#define CAB_ATTRIB_VOLUME 0x0008
67#define CAB_ATTRIB_DIRECTORY 0x0010
68#define CAB_ATTRIB_ARCHIVE 0x0020
69#define CAB_ATTRIB_EXECUTE 0x0040
70#define CAB_ATTRIB_UTF_NAME 0x0080
72#define CAB_FILE_MAX_FOLDER 0xFFFC
73#define CAB_FILE_CONTINUED 0xFFFD
74#define CAB_FILE_SPLIT 0xFFFE
75#define CAB_FILE_PREV_NEXT 0xFFFF
141#if !defined(_INC_MALLOC) && !defined(_INC_STDLIB)
206 *InputLength = *OutputLength =
Len;
218#define MSZIP_MAGIC 0x4B43
241 DPRINT(
"MSZipCodecUncompress(OutputBuffer = %x, InputBuffer = %x, "
245 if (*InputLength > 0)
251 DPRINT(
"Bad MSZIP block header magic (0x%X)\n", Magic);
256 Codec->ZStream.avail_in = *InputLength - 2;
258 Codec->ZStream.avail_out =
abs(*OutputLength);
271 Codec->ZStream.total_in = 2;
275 Codec->ZStream.avail_in = -*InputLength;
278 Codec->ZStream.avail_out =
abs(*OutputLength);
279 Codec->ZStream.total_in = 0;
282 Codec->ZStream.total_out = 0;
286 DPRINT(
"inflate() returned (%d) (%s)\n",
Status, Codec->ZStream.msg);
292 if (*OutputLength > 0)
302 *InputLength = Codec->ZStream.total_in;
303 *OutputLength = Codec->ZStream.total_out;
362 if (lpFileTime ==
NULL)
463 DPRINT(
"NtQueryInformationFile() failed (%x)\n", NtStatus);
476 DPRINT(
"NtSetInformationFile() failed (%x)\n", NtStatus);
492 if (CabinetContext->FileBuffer)
495 NtClose(CabinetContext->FileSectionHandle);
496 NtClose(CabinetContext->FileHandle);
497 CabinetContext->FileBuffer =
NULL;
512 CabinetContext->FileOpen =
FALSE;
513 wcscpy(CabinetContext->DestPath,
L"");
515 CabinetContext->CodecSelected =
FALSE;
518 CabinetContext->OverwriteHandler =
NULL;
519 CabinetContext->ExtractHandler =
NULL;
520 CabinetContext->DiskChangeHandler =
NULL;
522 CabinetContext->FolderUncompSize = 0;
523 CabinetContext->BytesLeftInBlock = 0;
524 CabinetContext->CabinetReserved = 0;
525 CabinetContext->FolderReserved = 0;
526 CabinetContext->DataReserved = 0;
527 CabinetContext->CabinetReservedArea =
NULL;
528 CabinetContext->LastFileOffset = 0;
559 if (
n != 0 &&
Path[
n - 1] !=
L'\\' &&
Ok)
577 return CabinetContext->CabinetName;
603 wcscpy(CabinetContext->DestPath, DestinationPath);
605 if (
wcslen(CabinetContext->DestPath) > 0)
618 return CabinetContext->DestPath;
640 if (CabinetContext->FileOpen)
643 DPRINT(
"CabinetOpen returning SUCCESS\n");
654 NtStatus =
NtOpenFile(&CabinetContext->FileHandle,
663 DPRINT1(
"Cannot open file (%S) (%x)\n", CabinetContext->CabinetName, NtStatus);
667 CabinetContext->FileOpen =
TRUE;
674 CabinetContext->FileHandle);
678 DPRINT1(
"NtCreateSection failed for %ls: %x\n", CabinetContext->CabinetName, NtStatus);
682 CabinetContext->FileBuffer = 0;
683 CabinetContext->FileSize = 0;
687 (
PVOID*)&CabinetContext->FileBuffer,
689 &CabinetContext->FileSize,
696 DPRINT1(
"NtMapViewOfSection failed: %x\n", NtStatus);
700 DPRINT(
"Cabinet file %S opened and mapped to %x\n",
701 CabinetContext->CabinetName, CabinetContext->FileBuffer);
702 CabinetContext->PCABHeader = (
PCFHEADER)CabinetContext->FileBuffer;
705 if (CabinetContext->FileSize <=
sizeof(
CFHEADER) ||
707 CabinetContext->PCABHeader->Version !=
CAB_VERSION ||
708 CabinetContext->PCABHeader->FolderCount == 0 ||
709 CabinetContext->PCABHeader->FileCount == 0 ||
710 CabinetContext->PCABHeader->FileTableOffset <
sizeof(
CFHEADER))
713 DPRINT1(
"File has invalid header\n");
724 CabinetContext->FolderReserved = *
Buffer;
726 CabinetContext->DataReserved = *
Buffer;
729 if (CabinetContext->CabinetReserved > 0)
731 CabinetContext->CabinetReservedArea =
Buffer;
732 Buffer += CabinetContext->CabinetReserved;
740 wcscpy(CabinetContext->CabinetPrev, CabinetContext->CabinetName);
763 wcscpy(CabinetContext->CabinetPrev,
L"");
764 wcscpy(CabinetContext->DiskPrev,
L"");
771 wcscpy(CabinetContext->CabinetNext, CabinetContext->CabinetName);
794 wcscpy(CabinetContext->CabinetNext,
L"");
795 wcscpy(CabinetContext->DiskNext,
L"");
799 DPRINT(
"CabinetOpen returning SUCCESS\n");
810 if (!CabinetContext->FileOpen)
814 CabinetContext->FileOpen =
FALSE;
855 if (
wcscmp(Search->Cabinet, CabinetContext->CabinetName) != 0)
864 Search->File = (
PCFFILE)(CabinetContext->FileBuffer + CabinetContext->PCABHeader->FileTableOffset);
874 if (Search->File->FolderIndex == 0xFFFD ||
875 Search->File->FolderIndex == 0xFFFF)
878 DPRINT(
"Skipping file (%s): FileOffset (0x%X), "
879 "LastFileOffset (0x%X)\n", (
char *)(Search->File + 1),
880 Search->File->FileOffset, CabinetContext->LastFileOffset);
885 if (Search->File != Prev)
889 Search->CFData =
NULL;
894 if (
wcscmp(Search->Search,
L"*") == 0)
916 if (Search->Index >= CabinetContext->PCABHeader->FileCount)
919 DPRINT(
"End of cabinet reached\n");
923 Search->File = (
PCFFILE)(
strchr((
char *)(Search->File + 1), 0) + 1);
926 DPRINT(
"Found file %s\n", Search->File->FileName);
944 DPRINT(
"CabinetFindNextFileSequential(FileName = %S)\n",
FileName);
975 PVOID DestFileBuffer;
976 PVOID CurrentDestBuffer;
989 LONG InputLength, OutputLength;
993 if (
wcscmp(Search->Cabinet, CabinetContext->CabinetName) != 0)
996 DPRINT(
"File is not in this cabinet (%S != %S)\n",
997 Search->Cabinet, CabinetContext->CabinetName);
1002 if (Search->File->FolderIndex == 0xFFFD ||
1003 Search->File->FolderIndex == 0xFFFF)
1009 else if (Search->File->FolderIndex == 0xFFFE)
1012 CurrentFolder = &CabinetContext->CabinetFolders[CabinetContext->PCABHeader->FolderCount - 1];
1017 CurrentFolder = &CabinetContext->CabinetFolders[Search->File->FolderIndex];
1032 DPRINT(
"Extracting file at uncompressed offset (0x%X) Size (%d bytes)\n",
1033 (
UINT)Search->File->FileOffset, (
UINT)Search->File->FileSize);
1035 if (CabinetContext->CreateFileHandler)
1038 CurrentDestBuffer = CabinetContext->CreateFileHandler(CabinetContext, Search->File->FileSize);
1039 if (!CurrentDestBuffer)
1041 DPRINT1(
"CreateFileHandler() failed\n");
1048 wcscpy(DestName, CabinetContext->DestPath);
1049 StringLength =
wcslen(DestName);
1076 DPRINT(
"NtCreateFile() failed (%S) (%x)\n", DestName, NtStatus);
1079 if (CabinetContext->OverwriteHandler ==
NULL ||
1080 CabinetContext->OverwriteHandler(CabinetContext, Search->File, DestName))
1096 DPRINT1(
"NtCreateFile() failed (%S) (%x)\n", DestName, NtStatus);
1102 DPRINT1(
"File (%S) exists\n", DestName);
1108 Search->File->FileTime,
1111 DPRINT1(
"DosDateTimeToFileTime() failed\n");
1123 DPRINT(
"NtQueryInformationFile() failed (%x)\n", NtStatus);
1136 DPRINT(
"NtSetInformationFile() failed (%x)\n", NtStatus);
1143 if (Search->File->FileSize == 0)
1149 MaxDestFileSize.
QuadPart = Search->File->FileSize;
1160 DPRINT1(
"NtCreateSection failed for %ls: %x\n", DestName, NtStatus);
1166 CabinetContext->DestFileSize = 0;
1171 &CabinetContext->DestFileSize,
1178 DPRINT1(
"NtMapViewOfSection failed: %x\n", NtStatus);
1180 goto CloseDestFileSection;
1183 CurrentDestBuffer = DestFileBuffer;
1187 if (CabinetContext->ExtractHandler !=
NULL)
1188 CabinetContext->ExtractHandler(CabinetContext, Search->File, DestName);
1191 CFData = Search->CFData;
1193 CFData = (
PCFDATA)(CabinetContext->CabinetFolders[Search->File->FolderIndex].DataOffset + CabinetContext->FileBuffer);
1195 CurrentOffset = Search->Offset;
1196 while (CurrentOffset + CFData->
UncompSize <= Search->File->FileOffset)
1201 CFData = (
PCFDATA)((
char *)(CFData + 1) + CabinetContext->DataReserved + CFData->
CompSize);
1204 Search->CFData = CFData;
1205 Search->Offset = CurrentOffset;
1211 CurrentBuffer = ((
unsigned char *)(CFData + 1)) + CabinetContext->DataReserved;
1213 InputLength = RemainingBlock;
1215 while (CurrentOffset < Search->
File->FileOffset)
1219 OutputLength = Search->File->FileOffset - CurrentOffset;
1220 if (OutputLength > (
LONG)
sizeof(Chunk))
1221 OutputLength =
sizeof(Chunk);
1224 OutputLength = -OutputLength;
1226 CabinetContext->Codec->Uncompress(CabinetContext->Codec,
1233 CurrentOffset += OutputLength;
1237 RemainingBlock -= InputLength;
1239 InputLength = -RemainingBlock;
1246 Size = Search->File->FileSize;
1249 OutputLength =
Size;
1250 DPRINT(
"Decompressing block at %x with RemainingBlock = %d, Size = %d\n",
1253 Status = CabinetContext->Codec->Uncompress(CabinetContext->Codec,
1260 DPRINT(
"Cannot uncompress block\n");
1269 CurrentDestBuffer = (
PVOID)((
ULONG_PTR)CurrentDestBuffer + OutputLength);
1273 Size -= OutputLength;
1275 RemainingBlock -= InputLength;
1276 if (
Size > 0 && RemainingBlock == 0)
1279 DPRINT(
"Out of block data\n");
1282 CurrentBuffer = (
unsigned char *)(CFData + 1) + CabinetContext->DataReserved;
1283 InputLength = RemainingBlock;
1290 if (!CabinetContext->CreateFileHandler)
1293CloseDestFileSection:
1294 if (!CabinetContext->CreateFileHandler)
1298 if (!CabinetContext->CreateFileHandler)
1314 if (CabinetContext->CodecSelected)
1316 if (
Id == CabinetContext->CodecId)
1319 CabinetContext->CodecSelected =
FALSE;
1334 CabinetContext->Codec->ZStream.zfree =
MSZipFree;
1335 CabinetContext->Codec->ZStream.opaque = (
voidpf)0;
1343 CabinetContext->CodecId =
Id;
1344 CabinetContext->CodecSelected =
TRUE;
1362 CabinetContext->OverwriteHandler = Overwrite;
1363 CabinetContext->ExtractHandler =
Extract;
1364 CabinetContext->DiskChangeHandler = DiskChange;
1365 CabinetContext->CreateFileHandler =
CreateFile;
1376 if (CabinetContext->CabinetReservedArea !=
NULL)
1380 *
Size = CabinetContext->CabinetReserved;
1383 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::@2307 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