NTSTATUS GetLangFile(PUNICODE_STRING LangFile, ULONG LangIndex, PCWSTR SubKey) { BOOL Success; WCHAR LangIndexBuffer[16]; NTSTATUS Status; PKEY_VALUE_PARTIAL_INFORMATION FileName; swprintf(LangIndexBuffer, L"%04x", LangIndex); Status = GetKeyValue(REGKEY_ROOT, SubKey, LangIndexBuffer, &FileName); FAIL_RETURN(Status); Success = RtlCreateUnicodeString(LangFile, (PWSTR)FileName->Data); FreeMemoryP(FileName); return Success ? STATUS_SUCCESS : STATUS_NO_MEMORY; }
NTSTATUS ReadFileInSystemDirectory(NtFileMemory &File, PUNICODE_STRING Path) { PWSTR Buffer; ULONG_PTR Length; NTSTATUS Status; Length = sizeof(ROOTDIR_SYSTEM32) + Path->Length + sizeof(WCHAR); Buffer = (PWSTR)AllocateMemoryP(Length); if (Buffer == nullptr) return STATUS_NO_MEMORY; Length = CONST_STRLEN(ROOTDIR_SYSTEM32); CopyMemory(Buffer, ROOTDIR_SYSTEM32, Length * sizeof(WCHAR)); CopyMemory(Buffer + Length, Path->Buffer, Path->Length); Buffer[Length + Path->Length / sizeof(WCHAR)] = 0; Status = File.Open(Buffer, NFD_NOT_RESOLVE_PATH); FreeMemoryP(Buffer); return Status; }
VOID FreeString(PVOID String) { FreeMemoryP(String); }
BOOL FreeClass(PVOID ClassName) { return IS_ATOM(ClassName) ? TRUE : FreeMemoryP(ClassName); }
EXTC VOID NTAPI FreeMemory2(PVOID p) { FreeMemoryP(p); }