43 pSetupData->SourcePath.Buffer,
L"unattend.inf");
45 DPRINT(
"UnattendInf path: '%S'\n", UnattendInfPath);
49 DPRINT(
"Does not exist: %S\n", UnattendInfPath);
57 pSetupData->LanguageId,
61 DPRINT(
"SpInfOpenInfFile() failed\n");
68 DPRINT(
"SpInfFindFirstLine() failed for section 'Unattend'\n");
75 DPRINT(
"INF_GetData() failed for key 'Signature'\n");
82 DPRINT(
"Signature not $ReactOS$\n");
92 DPRINT(
"Can't find key 'UnattendSetupEnabled'\n");
98 DPRINT(
"Can't read key 'UnattendSetupEnabled'\n");
104 DPRINT(
"Unattend setup is disabled by 'UnattendSetupEnabled' key!\n");
114 DPRINT(
"SpInfFindFirstLine() failed for key 'DestinationDiskNumber'\n");
120 DPRINT(
"SpInfGetIntField() failed for key 'DestinationDiskNumber'\n");
124 pSetupData->DestinationDiskNumber = (
LONG)IntValue;
129 DPRINT(
"SpInfFindFirstLine() failed for key 'DestinationPartitionNumber'\n");
135 DPRINT(
"SpInfGetIntField() failed for key 'DestinationPartitionNumber'\n");
139 pSetupData->DestinationPartitionNumber = (
LONG)IntValue;
147 ARRAYSIZE(pSetupData->InstallationDirectory),
153 DPRINT(
"INF_GetData() failed for key 'InstallationDirectory'\n");
158 DPRINT(
"Running unattended setup\n");
164 pSetupData->BootLoaderLocation = IntValue;
171 pSetupData->FormatPartition = IntValue;
178 pSetupData->AutoPartition = IntValue;
198 pSetupData->FsType = IntValue;
218 CHAR CrLf[] = {
'\r',
'\n'};
251 IniAddKey(IniSection,
L"UnattendedInstall", PathBuffer);
256 L"\"%s\"",
L"winnt");
257 IniAddKey(IniSection,
L"ProductType", PathBuffer);
260 L"\"%s\\\"", pSetupData->SourceRootPath.Buffer);
261 IniAddKey(IniSection,
L"SourcePath", PathBuffer);
270 pSetupData->SourcePath.Buffer,
L"unattend.inf");
273 DPRINT(
"Does not exist: %S\n", UnattendInfPath);
280 DPRINT1(
"Cannot load %S as an INI file!\n", UnattendInfPath);
288 pSetupData->DestinationPath.Buffer,
L"System32\\$winnt$.inf");
295 pSetupData->DestinationPath.Buffer,
L"System32\\$winnt$.inf");
301 pSetupData->SourcePath.Buffer,
L"unattend.inf");
304 DPRINT(
"Does not exist: %S\n", UnattendInfPath);
322 DPRINT1(
"Cannot load %S as an INI file!\n", PathBuffer);
334 DPRINT(
"NtQueryInformationFile() failed (Status %lx)\n",
Status);
347 DPRINT1(
"Cannot load %S !\n", UnattendInfPath);
425 RtlInitEmptyUnicodeString(InstallSourcePath,
427 sizeof(ImageFileBuffer.Buffer));
440 Ptr = ImageFileBuffer.Buffer + (InstallSourcePath->
Length /
sizeof(
WCHAR));
485 RtlInitEmptyUnicodeString(SystemRootPath,
487 sizeof(SystemRootBuffer.Buffer));
502 sizeof(SystemRootBuffer),
509 RtlInitEmptyUnicodeString(SystemRootPath,
511 sizeof(SystemRootBuffer.Buffer));
536 InstallSourcePath = SystemRootPath;
572 pSetupData->SourcePath.Buffer,
L"txtsetup.sif");
576 pSetupData->SetupInf =
580 pSetupData->LanguageId,
607 pSetupData->RequiredPartitionDiskSpace = ~0;
613 pSetupData->RequiredPartitionDiskSpace = (
ULONG)IntValue;
656 pSetupData->InstallationDirectory[0] = 0;
664 ARRAYSIZE(pSetupData->InstallationDirectory),
706 DPRINT1(
"We are using a different system partition!!\n");
720 OldActivePart =
NULL;
769#define IS_PATH_SEPARATOR(c) ((c) == L'\\' || (c) == L'/')
789 for (
p = InstallDir; *
p; ++
p)
798 for (
p = InstallDir; *
p;)
803 BOOLEAN IsNameLegal, SpacesInName;
831 if (
Length > 1 && *(
p - 2) !=
L'.' && *(
p - 1) ==
L'.')
842 SpacesInName =
FALSE;
846 if (!IsNameLegal || SpacesInName)
848 DPRINT(
"'%wZ' is %s 8.3 filename %s spaces\n",
850 (IsNameLegal ?
"a valid" :
"an invalid"),
851 (SpacesInName ?
"with" :
"without"));
878 L"%s\\",
Volume->Info.DeviceName);
881 DPRINT1(
"RtlStringCchPrintfW() failed with status 0x%08lx\n",
Status);
889 DPRINT1(
"RtlCreateUnicodeString() failed with status 0x%08lx\n",
Status);
893 DPRINT(
"DestinationRootPath: %wZ\n", &pSetupData->DestinationRootPath);
896 if (!InstallationDir)
897 InstallationDir = pSetupData->InstallationDirectory;
909 L"multi(0)disk(0)rdisk(%lu)partition(%lu)\\",
914 L"multi(%lu)disk(%lu)rdisk(%lu)partition(%lu)\\",
920 DPRINT1(
"Fixed disk found by BIOS, using MULTI ARC path '%S'\n", PathBuffer);
925 L"scsi(%u)disk(%u)rdisk(%u)partition(%lu)\\",
930 DPRINT1(
"Fixed disk not found by BIOS, using SCSI ARC path '%S'\n", PathBuffer);
937 L"multi(0)disk(0)rdisk(%lu)partition(%lu)\\",
939 DPRINT1(
"Removable disk, using MULTI ARC path '%S'\n", PathBuffer);
942 L"signature(%08x)disk(%u)rdisk(%u)partition(%lu)\\",
947 DPRINT1(
"Removable disk, using SIGNATURE ARC path '%S'\n", PathBuffer);
953 DPRINT1(
"RtlStringCchPrintfW() failed with status 0x%08lx\n",
Status);
962 DPRINT1(
"ConcatPaths() failed with status 0x%08lx\n",
Status);
971 DPRINT1(
"RtlCreateUnicodeString() failed with status 0x%08lx\n",
Status);
980 pSetupData->DestinationRootPath.Buffer, InstallationDir);
984 DPRINT1(
"CombinePaths() failed with status 0x%08lx\n",
Status);
994 DPRINT1(
"RtlCreateUnicodeString() failed with status 0x%08lx\n",
Status);
1006 DPRINT1(
"RtlCreateUnicodeString() failed with status 0x%08lx\n",
Status);
1033 pSetupData->ErrorRoutine = ErrorRoutine;
1057 &pSetupData->SourceRootPath,
1058 &pSetupData->SourceRootDir);
1061 DPRINT1(
"GetSourcePaths() failed (Status 0x%08lx)\n",
Status);
1064 DPRINT1(
"SourcePath (1): '%wZ'\n", &pSetupData->SourcePath);
1065 DPRINT1(
"SourceRootPath (1): '%wZ'\n", &pSetupData->SourceRootPath);
1066 DPRINT1(
"SourceRootDir (1): '%wZ'\n", &pSetupData->SourceRootDir);
1069 pSetupData->DestinationDiskNumber = 0;
1070 pSetupData->DestinationPartitionNumber = 1;
1071 pSetupData->BootLoaderLocation = 2;
1072 pSetupData->FormatPartition = 0;
1073 pSetupData->AutoPartition = 0;
1074 pSetupData->FsType = 0;
1080 DPRINT1(
"LoadSetupInf() failed (Error 0x%lx)\n",
Error);
1083 DPRINT1(
"SourcePath (2): '%wZ'\n", &pSetupData->SourcePath);
1084 DPRINT1(
"SourceRootPath (2): '%wZ'\n", &pSetupData->SourceRootPath);
1085 DPRINT1(
"SourceRootDir (2): '%wZ'\n", &pSetupData->SourceRootDir);
1091#if defined(SARCH_XBOX)
1107 if (pSetupData->ComputerList !=
NULL)
1110 pSetupData->ComputerList =
NULL;
1114 if (pSetupData->DisplayList !=
NULL)
1117 pSetupData->DisplayList =
NULL;
1121 if (pSetupData->KeyboardList !=
NULL)
1124 pSetupData->KeyboardList =
NULL;
1128 if (pSetupData->LayoutList !=
NULL)
1131 pSetupData->LayoutList =
NULL;
1135 if (pSetupData->LanguageList !=
NULL)
1138 pSetupData->LanguageList =
NULL;
1158 IN WCHAR DestinationDriveLetter,
1175 DPRINT1(
"TODO: Updating / repairing the registry is not completely implemented yet!\n");
1181 DPRINT1(
"VerifyRegistryHives failed, Status 0x%08lx\n",
Status);
1182 ShouldRepairRegistry =
FALSE;
1184 if (!ShouldRepairRegistry)
1185 DPRINT1(
"No need to repair the registry\n");
1198 DPRINT1(
"RegInitializeRegistry() failed\n");
1228 DPRINT1(
"SpInfFindFirstLine() failed\n");
1245 DPRINT1(
"No update needed for the registry!\n");
1285 pSetupData->LanguageId,
Delete))
1305 ASSERT(pSetupData->DisplayType);
1341 ASSERT(pSetupData->LayoutId);
1400 ShouldRepairRegistry =
FALSE;
NTSTATUS NtQueryObject(IN HANDLE Handle, IN OBJECT_INFO_CLASS ObjectInformationClass, OUT PVOID ObjectInformation, IN ULONG ObjectInformationLength, OUT PULONG ReturnLength)
PRTL_UNICODE_STRING_BUFFER Path
#define OBJ_NAME_PATH_SEPARATOR
#define FILE_DIRECTORY_FILE
#define FILE_NON_DIRECTORY_FILE
static BOOL ImportRegistryFile(HWND hWnd)
WCHAR FileNameBuffer[MAX_PATH]
BOOL Delete(LPCTSTR ServiceName)
VOID RegCleanupRegistry(IN PUNICODE_STRING NtSystemRoot)
NTSTATUS RegInitializeRegistry(IN PUNICODE_STRING NtSystemRoot)
NTSTATUS VerifyRegistryHives(IN PUNICODE_STRING NtSystemRoot, OUT PBOOLEAN ShouldRepairRegistry)
BOOLEAN SetDefaultPagefile(_In_ WCHAR Drive)
BOOLEAN ProcessKeyboardLayoutRegistry(_In_ PCWSTR pszLayoutId, _In_ PCWSTR LanguageId)
BOOLEAN ProcessDisplayRegistry(_In_ HINF InfFile, _In_ PCWSTR DisplayType)
BOOLEAN SetGeoID(_In_ GEOID GeoId)
BOOLEAN ProcessLocaleRegistry(_In_ PCWSTR LanguageId)
struct _GENENTRY * PGENENTRY
static FSVOL_OP CALLBACK FsVolCallback(_In_opt_ PVOID Context, _In_ FSVOLNOTIFY FormatStatus, _In_ ULONG_PTR Param1, _In_ ULONG_PTR Param2)
PPARTENTRY InstallPartition
PPARTENTRY SystemPartition
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define STATUS_NOT_IMPLEMENTED
#define NT_SUCCESS(StatCode)
static const WCHAR SystemRoot[]
#define DLL_PROCESS_ATTACH
#define INVALID_HANDLE_VALUE
static const WCHAR Cleanup[]
enum _ERROR_NUMBER ERROR_NUMBER
@ ERROR_SIGNATURE_TXTSETUPSIF
@ ERROR_CORRUPT_TXTSETUPSIF
@ ERROR_UPDATE_LOCALESETTINGS
@ ERROR_INITIALIZE_REGISTRY
@ ERROR_UPDATE_DISPLAY_SETTINGS
@ ERROR_UPDATE_KBSETTINGS
struct _FileName FileName
NTSTATUS CombinePaths(OUT PWSTR PathBuffer, IN SIZE_T cchPathSize, IN ULONG NumberOfPathComponents, IN ...)
NTSTATUS OpenAndMapFile(_In_opt_ HANDLE RootDirectory, _In_ PCWSTR PathNameToFile, _Out_opt_ PHANDLE FileHandle, _Out_opt_ PULONG FileSize, _Out_ PHANDLE SectionHandle, _Out_ PVOID *BaseAddress, _In_ BOOLEAN ReadWriteAccess)
Opens and maps a file in memory.
NTSTATUS ConcatPaths(IN OUT PWSTR PathBuffer, IN SIZE_T cchPathSize, IN ULONG NumberOfPathComponents, IN ...)
#define UnMapAndCloseFile(FileHandle, SectionHandle, BaseAddress)
#define DoesFileExist(RootDirectory, FileName)
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE FileHandle
#define FILE_SYNCHRONOUS_IO_NONALERT
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
_Check_return_ long __cdecl wcstol(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
_Check_return_ unsigned long __cdecl wcstoul(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
#define OBJ_CASE_INSENSITIVE
BOOLEAN NTAPI RtlIsNameLegalDOS8Dot3(_In_ PUNICODE_STRING Name, _Inout_opt_ POEM_STRING OemName, _Inout_opt_ PBOOLEAN NameContainsSpaces)
#define SpInfFindNextLine
FORCEINLINE VOID INF_FreeData(IN PCWSTR InfData)
#define SpInfCloseInfFile
#define SpInfFindFirstLine
VOID IniCacheDestroy(_In_ PINICACHE Cache)
NTSTATUS IniCacheLoad(PINICACHE *Cache, PWCHAR FileName, BOOLEAN String)
PINI_SECTION IniAddSection(_In_ PINICACHE Cache, _In_ PCWSTR Name)
NTSTATUS IniCacheSave(PINICACHE Cache, PWCHAR FileName)
PINICACHE IniCacheCreate(VOID)
PINI_KEYWORD IniAddKey(_In_ PINI_SECTION Section, _In_ PCWSTR Name, _In_ PCWSTR Data)
GEOID MUIGetGeoID(IN PCWSTR LanguageId)
BOOLEAN AddCodePage(IN PCWSTR LanguageId)
BOOLEAN AddKeyboardLayouts(IN PCWSTR LanguageId)
SPFILE_EXPORTS SpFileExports
SPINF_EXPORTS SpInfExports
BOOLEAN INF_GetDataField(IN PINFCONTEXT Context, IN ULONG FieldIndex, OUT PCWSTR *Data)
BOOLEAN INF_GetData(IN PINFCONTEXT Context, OUT PCWSTR *Key, OUT PCWSTR *Data)
VOID NTAPI DestroyGenericList(IN OUT PGENERIC_LIST List, IN BOOLEAN FreeData)
PGENERIC_LIST_ENTRY NTAPI GetCurrentListEntry(IN PGENERIC_LIST List)
PVOID NTAPI GetListEntryData(IN PGENERIC_LIST_ENTRY Entry)
static const char const char const char PIMAGEHLP_STATUS_ROUTINE StatusRoutine
static OUT PIO_STATUS_BLOCK IoStatusBlock
#define InitializeObjectAttributes(p, n, a, r, s)
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
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 SYMBOLIC_LINK_QUERY
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)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define NtCurrentProcess()
NTSYSAPI NTSTATUS NTAPI NtQueryInformationFile(IN HANDLE hFile, OUT PIO_STATUS_BLOCK pIoStatusBlock, OUT PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass)
struct _OBJECT_NAME_INFORMATION OBJECT_NAME_INFORMATION
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
NTSYSAPI BOOLEAN NTAPI RtlPrefixUnicodeString(IN PUNICODE_STRING String1, IN PUNICODE_STRING String2, IN BOOLEAN CaseInSensitive)
#define RTL_NUMBER_OF_FIELD(type, field)
#define UNREFERENCED_PARAMETER(P)
_In_ ULONG _In_ ULONG _In_ ULONG Length
NTSTATUS NTAPI NtQueryInformationProcess(_In_ HANDLE ProcessHandle, _In_ PROCESSINFOCLASS ProcessInformationClass, _Out_ PVOID ProcessInformation, _In_ ULONG ProcessInformationLength, _Out_opt_ PULONG ReturnLength)
NTSTRSAFEAPI RtlStringCchCopyW(_Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cchDest, _In_ NTSTRSAFE_PCWSTR pszSrc)
NTSTRSAFEVAPI RtlStringCchPrintfW(_Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cchDest, _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,...)
NTSTATUS NTAPI NtQuerySymbolicLinkObject(IN HANDLE LinkHandle, OUT PUNICODE_STRING LinkTarget, OUT PULONG ResultLength OPTIONAL)
NTSTATUS NTAPI NtOpenSymbolicLinkObject(OUT PHANDLE LinkHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
@ FSVOLNOTIFY_PARTITIONERROR
FSVOL_OP(CALLBACK * PFSVOL_CALLBACK)(_In_opt_ PVOID Context, _In_ FSVOLNOTIFY FormatStatus, _In_ ULONG_PTR Param1, _In_ ULONG_PTR Param2)
BOOLEAN SetMountedDeviceValues(_In_ PPARTLIST List)
BOOLEAN NTAPI CreatePartition(_In_ PPARTLIST List, _Inout_ PPARTENTRY PartEntry, _In_opt_ ULONGLONG SizeBytes, _In_opt_ ULONG_PTR PartitionInfo)
BOOLEAN SetActivePartition(IN PPARTLIST List, IN PPARTENTRY PartEntry, IN PPARTENTRY OldActivePart OPTIONAL)
PPARTENTRY FindSupportedSystemPartition(IN PPARTLIST List, IN BOOLEAN ForceSelect, IN PDISKENTRY AlternativeDisk OPTIONAL, IN PPARTENTRY AlternativePart OPTIONAL)
ERROR_NUMBER LoadSetupInf(IN OUT PUSETUP_DATA pSetupData)
VOID NTAPI InstallSetupInfFile(IN OUT PUSETUP_DATA pSetupData)
ERROR_NUMBER NTAPI InitializeSetup(_Inout_ PUSETUP_DATA pSetupData, _In_opt_ PSETUP_ERROR_ROUTINE ErrorRoutine, _In_ PSPFILE_EXPORTS pSpFileExports, _In_ PSPINF_EXPORTS pSpInfExports)
NTSTATUS NTAPI InitDestinationPaths(_Inout_ PUSETUP_DATA pSetupData, _In_ PCWSTR InstallationDir, _In_ PVOLENTRY Volume)
NTSTATUS NTAPI LdrDisableThreadCalloutsForDll(_In_ PVOID BaseAddress)
VOID NTAPI CheckUnattendedSetup(IN OUT PUSETUP_DATA pSetupData)
BOOL NTAPI DllMain(_In_ HINSTANCE hDll, _In_ ULONG dwReason, _In_opt_ PVOID pReserved)
BOOLEAN NTAPI InitSystemPartition(_In_ PPARTLIST PartitionList, _In_ PPARTENTRY InstallPartition, _Out_ PPARTENTRY *pSystemPartition, _In_opt_ PFSVOL_CALLBACK FsVolCallback, _In_opt_ PVOID Context)
Find or set the active system partition.
#define IS_PATH_SEPARATOR(c)
VOID NTAPI FinishSetup(IN OUT PUSETUP_DATA pSetupData)
NTSTATUS GetSourcePaths(_Out_ PUNICODE_STRING SourcePath, _Out_ PUNICODE_STRING SourceRootPath, _Out_ PUNICODE_STRING SourceRootDir)
Determine the installation source path and isolate its useful path components (root path and source s...
BOOLEAN NTAPI IsValidInstallDirectory(_In_ PCWSTR InstallDir)
Verify whether the given directory is suitable for ReactOS installation. Each path component must be ...
BOOLEAN IsUnattendedSetup
ERROR_NUMBER NTAPI UpdateRegistry(IN OUT PUSETUP_DATA pSetupData, IN BOOLEAN RepairUpdateFlag, IN PPARTLIST PartitionList, IN WCHAR DestinationDriveLetter, IN PCWSTR SelectedLanguageId, IN PREGISTRY_STATUS_ROUTINE StatusRoutine OPTIONAL, IN PFONTSUBSTSETTINGS SubstSettings OPTIONAL)
#define ERROR_SYSTEM_PARTITION_NOT_FOUND
#define IS_VALID_INSTALL_PATH_CHAR(c)
Defines the class of characters valid for the installation directory.
VOID(__cdecl * PREGISTRY_STATUS_ROUTINE)(IN REGISTRY_STATUS,...)
VOID(__cdecl * PSETUP_ERROR_ROUTINE)(IN struct _USETUP_DATA *,...)
#define FileStandardInformation
PULONG MinorVersion OPTIONAL
base of all file and directory entries
PDRIVE_LAYOUT_INFORMATION LayoutBuffer
struct _DISKENTRY * DiskEntry
ULONG OnDiskPartitionNumber
PPARTENTRY SystemPartition
BOOL DoRegistryFontFixup(PFONTSUBSTSETTINGS pSettings, LANGID LangID)
#define RTL_CONSTANT_STRING(s)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
static PPARTLIST PartitionList
static BOOLEAN RepairUpdateFlag
PCWSTR SelectedLanguageId
_In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR Iterator
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
_In_ WDFIOTARGET _In_ _Strict_type_match_ WDF_IO_TARGET_SENT_IO_ACTION Action
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO