Go to the source code of this file.
|
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) |
|
◆ INICACHE
◆ INICACHEITERATOR
◆ INICACHEKEY
◆ INICACHESECTION
◆ PINICACHE
◆ PINICACHEITERATOR
◆ PINICACHEKEY
◆ PINICACHESECTION
◆ INSERTION_TYPE
Enumerator |
---|
INSERT_FIRST | |
INSERT_BEFORE | |
INSERT_AFTER | |
INSERT_LAST | |
Definition at line 46 of file inicache.h.
◆ 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}
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)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
struct _INICACHESECTION * PINICACHESECTION
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
struct _INICACHESECTION * Prev
Referenced by CreateCommonFreeLdrSections(), CreateNTOSEntry(), InstallSetupInfFile(), and OpenIniBootLoaderStore().
◆ IniCacheCreate()
◆ IniCacheDestroy()
◆ IniCacheFindClose()
◆ IniCacheFindFirstValue()
◆ IniCacheFindNextValue()
◆ IniCacheGetKey()
◆ IniCacheGetSection()
◆ 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}
struct _INICACHEKEY * PINICACHEKEY
HRESULT Next([in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATPROPSETSTG *rgelt, [out] ULONG *pceltFetched)
struct _INICACHEKEY * Next
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
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
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}
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
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().