#include "precomp.h"
#include "inicache.h"
#include <debug.h>
Go to the source code of this file.
|
static PINICACHEKEY | IniCacheFreeKey (PINICACHEKEY Key) |
|
static PINICACHESECTION | IniCacheFreeSection (PINICACHESECTION Section) |
|
static PINICACHEKEY | IniCacheFindKey (PINICACHESECTION Section, PWCHAR Name, ULONG NameLength) |
|
static PINICACHEKEY | IniCacheAddKey (PINICACHESECTION Section, PCHAR Name, ULONG NameLength, PCHAR Data, ULONG DataLength) |
|
static PINICACHESECTION | IniCacheAddSection (PINICACHE Cache, PCHAR Name, ULONG NameLength) |
|
static PCHAR | IniCacheSkipWhitespace (PCHAR Ptr) |
|
static PCHAR | IniCacheSkipToNextSection (PCHAR Ptr) |
|
static PCHAR | IniCacheGetSectionName (PCHAR Ptr, PCHAR *NamePtr, PULONG NameSize) |
|
static PCHAR | IniCacheGetKeyName (PCHAR Ptr, PCHAR *NamePtr, PULONG NameSize) |
|
static PCHAR | IniCacheGetKeyValue (PCHAR Ptr, PCHAR *DataPtr, PULONG DataSize, BOOLEAN String) |
|
NTSTATUS | IniCacheLoadFromMemory (PINICACHE *Cache, PCHAR FileBuffer, ULONG FileLength, BOOLEAN String) |
|
NTSTATUS | IniCacheLoadByHandle (PINICACHE *Cache, HANDLE FileHandle, BOOLEAN String) |
|
NTSTATUS | IniCacheLoad (PINICACHE *Cache, PWCHAR FileName, BOOLEAN String) |
|
VOID | IniCacheDestroy (PINICACHE Cache) |
|
PINICACHESECTION | IniCacheGetSection (PINICACHE Cache, PWCHAR Name) |
|
NTSTATUS | IniCacheGetKey (PINICACHESECTION Section, PWCHAR KeyName, PWCHAR *KeyData) |
|
PINICACHEITERATOR | IniCacheFindFirstValue (PINICACHESECTION Section, PWCHAR *KeyName, PWCHAR *KeyData) |
|
BOOLEAN | IniCacheFindNextValue (PINICACHEITERATOR Iterator, PWCHAR *KeyName, PWCHAR *KeyData) |
|
VOID | IniCacheFindClose (PINICACHEITERATOR Iterator) |
|
PINICACHEKEY | IniCacheInsertKey (PINICACHESECTION Section, PINICACHEKEY AnchorKey, INSERTION_TYPE InsertionType, PWCHAR Name, PWCHAR Data) |
|
PINICACHE | IniCacheCreate (VOID) |
|
NTSTATUS | IniCacheSaveByHandle (PINICACHE Cache, HANDLE FileHandle) |
|
NTSTATUS | IniCacheSave (PINICACHE Cache, PWCHAR FileName) |
|
PINICACHESECTION | IniCacheAppendSection (PINICACHE Cache, PWCHAR Name) |
|
◆ NDEBUG
◆ IniCacheAddKey()
Definition at line 104 of file inicache.c.
110{
113
115
116 if (Section ==
NULL ||
118 NameLength == 0 ||
121 {
122 DPRINT(
"Invalid parameter\n");
124 }
125
130 {
131 DPRINT(
"RtlAllocateHeap() failed\n");
133 }
134
136 0,
137 (NameLength + 1) *
sizeof(
WCHAR));
139 {
140 DPRINT(
"RtlAllocateHeap() failed\n");
143 }
144
145
146 for (
i = 0;
i < NameLength;
i++)
147 {
149 }
150 Key->Name[NameLength] = 0;
151
153 0,
156 {
157 DPRINT(
"RtlAllocateHeap() failed\n");
161 }
162
163
165 {
167 }
169
170
172 {
175 }
176 else
177 {
181 }
182
184}
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)
_In_ ULONG _In_opt_ WDFREQUEST _In_opt_ PVOID _In_ size_t _In_ PVOID _In_ size_t _Out_ size_t * DataLength
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
struct _INICACHEKEY * PINICACHEKEY
struct _INICACHEKEY * Next
Referenced by IniCacheLoadFromMemory().
◆ IniCacheAddSection()
Definition at line 189 of file inicache.c.
193{
196
198 {
199 DPRINT(
"Invalid parameter\n");
201 }
202
207 {
208 DPRINT(
"RtlAllocateHeap() failed\n");
210 }
211
212
214 0,
215 (NameLength + 1) *
sizeof(
WCHAR));
217 {
218 DPRINT(
"RtlAllocateHeap() failed\n");
221 }
222
223
224 for (
i = 0;
i < NameLength;
i++)
225 {
227 }
228 Section->
Name[NameLength] = 0;
229
230
232 {
233 Cache->FirstSection = Section;
234 Cache->LastSection = Section;
235 }
236 else
237 {
238 Cache->LastSection->Next = Section;
240 Cache->LastSection = Section;
241 }
242
243 return Section;
244}
struct _INICACHESECTION * PINICACHESECTION
struct _INICACHESECTION * Prev
Referenced by IniCacheLoadFromMemory().
◆ IniCacheAppendSection()
Definition at line 1088 of file inicache.c.
1091{
1093
1095 {
1096 DPRINT(
"Invalid parameter\n");
1098 }
1099
1103 if (Section ==
NULL)
1104 {
1105 DPRINT(
"RtlAllocateHeap() failed\n");
1107 }
1108
1109
1111 0,
1114 {
1115 DPRINT(
"RtlAllocateHeap() failed\n");
1118 }
1119
1120
1122
1123
1125 {
1126 Cache->FirstSection = Section;
1127 Cache->LastSection = Section;
1128 }
1129 else
1130 {
1131 Cache->LastSection->Next = Section;
1133 Cache->LastSection = Section;
1134 }
1135
1136 return Section;
1137}
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
Referenced by CreateCommonFreeLdrSections(), CreateNTOSEntry(), InstallSetupInfFile(), and OpenIniBootLoaderStore().
◆ IniCacheCreate()
◆ IniCacheDestroy()
◆ IniCacheFindClose()
◆ IniCacheFindFirstValue()
◆ IniCacheFindKey()
Definition at line 79 of file inicache.c.
83{
85
88 {
90 {
92 break;
93 }
94
96 }
97
99}
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
Referenced by IniCacheGetKey().
◆ IniCacheFindNextValue()
◆ IniCacheFreeKey()
◆ IniCacheFreeSection()
Definition at line 50 of file inicache.c.
52{
54
57
60 {
62 }
64
66 {
69 }
70
72
73 return Next;
74}
static PINICACHEKEY IniCacheFreeKey(PINICACHEKEY Key)
struct _INICACHESECTION * Next
Referenced by IniCacheDestroy().
◆ IniCacheGetKey()
◆ IniCacheGetKeyName()
Definition at line 325 of file inicache.c.
329{
331
333 *NameSize = 0;
334
336 {
338 *NameSize = 0;
340
341
343 {
345 }
347 {
348 continue;
349 }
350
352
354 {
357 }
359 {
360 while (*
Ptr != 0 && *
Ptr !=
'\r' && *
Ptr !=
'\n')
361 {
363 }
364 }
365 else
366 {
368 break;
369 }
370 }
371
373}
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Referenced by IniCacheLoadFromMemory().
◆ IniCacheGetKeyValue()
Definition at line 378 of file inicache.c.
383{
385
388
389
391 {
393 }
394
395
397 {
399 }
401
402
404 {
406 }
407
409 {
411
412
415 {
418 }
420
421 while (*
Ptr && *
Ptr !=
'\r' && *
Ptr !=
'\n')
422 {
424 }
425 }
426 else
427 {
428
430 while (*
Ptr != 0 && *
Ptr !=
'\r' && *
Ptr !=
';')
431 {
434 }
435 }
436
437
442
444
446}
_In_ NDIS_STATUS _In_ ULONG _In_ USHORT _In_opt_ PVOID _In_ ULONG DataSize
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Referenced by IniCacheLoadFromMemory().
◆ IniCacheGetSection()
◆ IniCacheGetSectionName()
Definition at line 280 of file inicache.c.
284{
287
289 *NameSize = 0;
290
291
293 {
295 }
296
298
299 while (*
Ptr != 0 && *
Ptr !=
']')
300 {
303 }
305
306 while (*
Ptr != 0 && *
Ptr !=
L'\n')
307 {
309 }
311
313
316
318
320}
char * strncpy(char *DstString, const char *SrcString, ACPI_SIZE Count)
Referenced by IniCacheLoadFromMemory().
◆ IniCacheInsertKey()
Definition at line 826 of file inicache.c.
832{
834
836
837 if (Section ==
NULL ||
842 {
843 DPRINT(
"Invalid parameter\n");
845 }
846
847
852 {
853 DPRINT(
"RtlAllocateHeap() failed\n");
855 }
856
857
859 0,
862 {
863 DPRINT(
"RtlAllocateHeap() failed\n");
866 }
867
868
870
871
873 0,
876 {
877 DPRINT(
"RtlAllocateHeap() failed\n");
881 }
882
883
885
886
888 {
891 }
894 {
895
899 }
901 {
902
903 Key->Next = AnchorKey;
907 }
910 {
914 }
916 {
917
919 Key->Prev = AnchorKey;
922 }
923
925}
HRESULT Next([in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATPROPSETSTG *rgelt, [out] ULONG *pceltFetched)
struct _INICACHEKEY * Prev
Referenced by AddBootStoreEntry(), CreateCommonFreeLdrSections(), CreateNTOSEntry(), InstallSetupInfFile(), and SetBootStoreOptions().
◆ IniCacheLoad()
Definition at line 621 of file inicache.c.
625{
631
633
634
636
642
650 {
653 }
654
655 DPRINT(
"NtOpenFile() successful\n");
656
658
659
662}
#define FILE_NON_DIRECTORY_FILE
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define NT_SUCCESS(StatCode)
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE FileHandle
#define FILE_SYNCHRONOUS_IO_NONALERT
#define OBJ_CASE_INSENSITIVE
NTSTATUS IniCacheLoadByHandle(PINICACHE *Cache, HANDLE FileHandle, BOOLEAN String)
static OUT PIO_STATUS_BLOCK IoStatusBlock
#define InitializeObjectAttributes(p, n, a, r, s)
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)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
#define FILE_GENERIC_READ
Referenced by InstallSetupInfFile().
◆ IniCacheLoadByHandle()
Definition at line 547 of file inicache.c.
551{
558
560
561
568 {
569 DPRINT(
"NtQueryInformationFile() failed (Status %lx)\n",
Status);
571 }
572
574
576
577
579 0,
581 if (FileBuffer ==
NULL)
582 {
583 DPRINT1(
"RtlAllocateHeap() failed\n");
585 }
586
587
594 FileBuffer,
598
599
601
603 {
605 goto Quit;
606 }
607
610 {
611 DPRINT1(
"IniCacheLoadFromMemory() failed (Status %lx)\n",
Status);
612 }
613
614Quit:
615
618}
_In_ PFCB _In_ LONGLONG FileOffset
NTSTATUS IniCacheLoadFromMemory(PINICACHE *Cache, PCHAR FileBuffer, ULONG FileLength, BOOLEAN String)
_Out_ PNDIS_HANDLE _Out_ PUINT FileLength
NTSYSAPI NTSTATUS NTAPI NtQueryInformationFile(IN HANDLE hFile, OUT PIO_STATUS_BLOCK pIoStatusBlock, OUT PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass)
#define FileStandardInformation
NTSTATUS NTAPI NtReadFile(HANDLE FileHandle, HANDLE Event, PIO_APC_ROUTINE ApcRoutine, PVOID ApcContext, PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length, PLARGE_INTEGER ByteOffset, PULONG Key)
#define STATUS_INSUFFICIENT_RESOURCES
Referenced by IniCacheLoad().
◆ IniCacheLoadFromMemory()
Definition at line 452 of file inicache.c.
457{
459
462
464 ULONG SectionNameSize;
465
468
471
472
477 {
478 DPRINT(
"RtlAllocateHeap() failed\n");
480 }
481
482
486 {
489 continue;
490
492 {
495
497 &SectionName,
498 &SectionNameSize);
499
500 DPRINT(
"[%.*s]\n", SectionNameSize, SectionName);
501
503 SectionName,
504 SectionNameSize);
506 {
507 DPRINT(
"IniCacheAddSection() failed\n");
509 continue;
510 }
511 }
512 else
513 {
515 {
517 continue;
518 }
519
522 &KeyNameSize);
523
525 &KeyValue,
526 &KeyValueSize,
528
529 DPRINT(
"'%.*s' = '%.*s'\n", KeyNameSize,
KeyName, KeyValueSize, KeyValue);
530
533 KeyNameSize,
534 KeyValue,
535 KeyValueSize);
537 {
538 DPRINT(
"IniCacheAddKey() failed\n");
539 }
540 }
541 }
542
544}
static PCHAR IniCacheGetKeyName(PCHAR Ptr, PCHAR *NamePtr, PULONG NameSize)
static PCHAR IniCacheGetKeyValue(PCHAR Ptr, PCHAR *DataPtr, PULONG DataSize, BOOLEAN String)
static PCHAR IniCacheSkipToNextSection(PCHAR Ptr)
static PCHAR IniCacheGetSectionName(PCHAR Ptr, PCHAR *NamePtr, PULONG NameSize)
static PINICACHEKEY IniCacheAddKey(PINICACHESECTION Section, PCHAR Name, ULONG NameLength, PCHAR Data, ULONG DataLength)
static PCHAR IniCacheSkipWhitespace(PCHAR Ptr)
static PINICACHESECTION IniCacheAddSection(PINICACHE Cache, PCHAR Name, ULONG NameLength)
Referenced by IniCacheLoadByHandle(), and OpenIniBootLoaderStore().
◆ IniCacheSave()
Definition at line 1043 of file inicache.c.
1046{
1052
1053
1055
1061
1068 0,
1072 0);
1074 {
1075 DPRINT(
"NtCreateFile() failed (Status %lx)\n",
Status);
1077 }
1078
1080
1081
1084}
#define FILE_ATTRIBUTE_NORMAL
#define FILE_SEQUENTIAL_ONLY
NTSTATUS IniCacheSaveByHandle(PINICACHE Cache, HANDLE FileHandle)
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 FILE_GENERIC_WRITE
Referenced by InstallSetupInfFile().
◆ IniCacheSaveByHandle()
Definition at line 948 of file inicache.c.
951{
961
962
964 Section =
Cache->FirstSection;
965 while (Section !=
NULL)
966 {
968 + 4;
969
972 {
975 + 3;
977 }
978
979 Section = Section->
Next;
982 }
983
985
986
991 {
992 DPRINT1(
"RtlAllocateHeap() failed\n");
994 }
995
996
998 Section =
Cache->FirstSection;
999 while (Section !=
NULL)
1000 {
1003
1006 {
1010 }
1011
1012 Section = Section->
Next;
1013 if (Section !=
NULL)
1014 {
1017 }
1018 }
1019
1020
1032 {
1036 }
1037
1040}
#define sprintf(buf, format,...)
NTSYSAPI NTSTATUS NTAPI NtWriteFile(IN HANDLE hFile, IN HANDLE hEvent OPTIONAL, IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL, IN PVOID IoApcContext OPTIONAL, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN PVOID WriteBuffer, IN ULONG WriteBufferLength, IN PLARGE_INTEGER FileOffset OPTIONAL, IN PULONG LockOperationKey OPTIONAL)
_In_ ULONG _In_ ULONG Offset
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
Referenced by CloseIniBootLoaderStore(), and IniCacheSave().
◆ IniCacheSkipToNextSection()
static PCHAR IniCacheSkipToNextSection |
( |
PCHAR |
Ptr | ) |
|
|
static |
◆ IniCacheSkipWhitespace()