91 PWCHAR FileNameEnd, FileNameSeparator;
95 if (FileNameSeparator)
102 if (FileNameEnd == FileNameSeparator) FileNameEnd++;
129 PathLengthInBytes = 0;
153 PathLengthInBytes += (2 *
sizeof(
WCHAR));
218 PathLengthInBytes += (EnvPath.
Length +
sizeof(
L';'));
237 if (!(
AppName) || !(AppNameEnd))
270 PathLengthInBytes += ((AppNameEnd -
AppName) *
sizeof(
WCHAR)) +
sizeof(
L';');
280 ASSERT(PathLengthInBytes > 0);
281 ASSERT(!(PathLengthInBytes & 1));
284 PathBuffer =
RtlAllocateHeap(RtlGetProcessHeap(), 0, PathLengthInBytes);
293 PathCurrent = PathBuffer;
309 *PathCurrent++ =
';';
318 ASSERT(((PathCurrent - PathBuffer + 1 + (AppNameEnd -
AppName)) *
sizeof(
WCHAR)) <= PathLengthInBytes);
324 PathCurrent += AppNameEnd -
AppName;
325 *PathCurrent++ =
';';
344 ASSERT((((PathCurrent - PathBuffer + 1) *
sizeof(
WCHAR)) + EnvPath.
Length) <= PathLengthInBytes);
349 *PathCurrent++ =
';';
357 ASSERT(((PathCurrent - PathBuffer + 2) *
sizeof(
WCHAR)) <= PathLengthInBytes);
358 *PathCurrent++ =
'.';
361 *PathCurrent++ =
';';
370 ASSERT((PathCurrent - PathBuffer) *
sizeof(
WCHAR) == PathLengthInBytes);
371 ASSERT(PathCurrent > PathBuffer);
397 DPRINT(
"Computing Process Search path\n");
408 DPRINT(
"Computing EXE path: %S\n", FullPath);
465 sizeof(PartialInfoBuffer),
473 CurrentDirPlacement = *(
PULONG)PartialInfo->
Data;
496 CurrentDirPlacement = OldCurrentDirPlacement;
526 CurDir = &
NtCurrentPeb()->ProcessParameters->CurrentDirectory.DosPath;
528 CurLength = CurDir->
Length;
540 CurDirCopy = *CurDir;
603 HasExtension =
FALSE;
613 if ((!(HasExtension) && (
i >= 7)) || (
i == AnsiName.
Length - 1))
632 if ((HasExtension) || (Dots > 3))
return FALSE;
639 if ((
i >= 8) && !(HasExtension))
return FALSE;
658 HasExtension =
FALSE;
665 if ((HasExtension) || (Dots > 3))
673 if ((
i >= 8) && (!HasExtension))
return TRUE;
703 while ((*
p) && ((*
p !=
L'\\') && (*
p !=
L'/')))
p++;
718 if ((
First) && (Last))
752 for (ReturnPath =
Path + 2,
i = 2; (
i > 0) && (*ReturnPath); ReturnPath++)
755 if ((*ReturnPath ==
L'\\') || (*ReturnPath ==
L'/'))
i--;
786 RtlInitEmptyUnicodeString(&EmptyString,
NULL, 0);
846 if (
strchr(lpPathName,
';'))
1000 ULONG PathSize, FilePartSize;
1010 FilePartSize = PathSize = 0;
1039 if ((PathSize) && (
lpFilePart) && (LocalFilePart))
1062 if (!PathSize)
goto Quickie;
1133 ULONG PathSize, FilePartSize, AnsiLength;
1147 if (!FileNameString)
return 0;
1185 if (!PathSize)
goto Quickie;
1200 PathSize = AnsiLength + 1;
1209 PathSize *
sizeof(
WCHAR));
1220 PathSize = AnsiLength;
1268 if (!PathSize)
goto Quickie;
1305 UNICODE_STRING FileNameString, ExtensionString, PathString, CallerBuffer;
1322 while ((FileNameString.
Length >=
sizeof(
WCHAR)) &&
1329 if (!FileNameString.
Length)
1410 DbgPrint(
"%s on file %wZ failed; NTSTATUS = %08lx\n",
1414 DbgPrint(
" Path = %wZ\n", &PathString);
1441 if ((PathString.
Buffer != lpPath) && (PathString.
Buffer))
1506 if (lpszLongPath != lpszShortPath)
1525 if (!Original)
goto ErrorQuickie;
1532 Last = &Original[Last - lpszShortPath];
1545 (((lpszLongPath >= lpszShortPath) && (lpszLongPath < &lpszShortPath[
Length])) ||
1546 ((lpszLongPath < lpszShortPath) && (&lpszLongPath[
cchBuffer] >= lpszShortPath))))
1549 if (!
Buffer)
goto ErrorQuickie;
1594 First = FindFileData.cFileName;
1660 if (Original)
RtlFreeHeap(RtlGetProcessHeap(), 0, Original);
1696 LongPath = LongPathBuffer;
1716 LongPathUni.
Buffer = LongPath;
1740 if ((LongPath) && (LongPath != LongPathBuffer))
1777 ShortPath = ShortPathBuffer;
1797 ShortPathUni.
Buffer = ShortPath;
1821 if ((ShortPath) && (ShortPath != ShortPathBuffer))
1887 if (lpszLongPath != lpszShortPath)
1906 if (!Original)
goto ErrorQuickie;
1913 Last = &Original[Last - lpszLongPath];
1916 Dst = lpszShortPath;
1926 (((lpszShortPath >= lpszLongPath) && (lpszShortPath < &lpszLongPath[
Length])) ||
1927 ((lpszShortPath < lpszLongPath) && (&lpszShortPath[
cchBuffer] >= lpszLongPath))))
1930 if (!
Buffer)
goto ErrorQuickie;
1975 First = FindFileData.cAlternateFileName;
2041 if (Original)
RtlFreeHeap(RtlGetProcessHeap(), 0, Original);
2083 static const WCHAR tmp[] = {
'T',
'M',
'P', 0 };
2084 static const WCHAR temp[] = {
'T',
'E',
'M',
'P', 0 };
2085 static const WCHAR userprofile[] = {
'U',
'S',
'E',
'R',
'P',
'R',
'O',
'F',
'I',
'L',
'E',0 };
2115 if (full_tmp_path[
ret-1] !=
'\\')
2117 full_tmp_path[
ret++] =
'\\';
2118 full_tmp_path[
ret] =
'\0';
2296 if (uSize < AnsiLength)
return AnsiLength;
2380 if (uSize < AnsiLength)
return AnsiLength;
IN PUNICODE_STRING StaticString
PRTL_UNICODE_STRING_BUFFER Path
char * strchr(const char *String, int ch)
#define OBJ_NAME_PATH_SEPARATOR
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_ PFCB _In_ PCD_NAME DirName
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
#define ERROR_NOT_ENOUGH_MEMORY
static CHAR AppName[MAX_PATH]
#define NT_SUCCESS(StatCode)
#define ERROR_CALL_NOT_IMPLEMENTED
#define ERROR_INVALID_PARAMETER
#define GetCurrentDirectoryW(x, y)
#define GetEnvironmentVariableW(x, y, z)
#define INVALID_HANDLE_VALUE
RTL_CRITICAL_SECTION BaseDllDirectoryLock
UINT WINAPI SetErrorMode(IN UINT uMode)
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
DWORD FilenameW2A_FitOrFail(LPSTR DestA, INT destLen, LPCWSTR SourceW, INT sourceLen)
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
BOOL WINAPI FindClose(HANDLE hFindFile)
UINT WINAPI GetSystemWindowsDirectoryA(OUT LPSTR lpBuffer, IN UINT uSize)
DWORD WINAPI GetDllDirectoryW(IN DWORD nBufferLength, OUT LPWSTR lpBuffer)
BOOLEAN WINAPI CheckForSameCurdir(IN PUNICODE_STRING DirName)
UNICODE_STRING BaseWindowsDirectory
DWORD WINAPI GetCurrentDirectoryA(IN DWORD nBufferLength, OUT LPSTR lpBuffer)
LPWSTR WINAPI BaseComputeProcessSearchPath(VOID)
BASE_SEARCH_PATH_TYPE BaseDllOrderNoCurrent[BaseSearchPathMax]
BASE_CURRENT_DIR_PLACEMENT BasepDllCurrentDirPlacement
UINT WINAPI GetSystemWow64DirectoryA(OUT LPSTR lpBuffer, IN UINT uSize)
PVOID gpTermsrvGetWindowsDirectoryW
UNICODE_STRING BasePathVariableName
DWORD WINAPI GetShortPathNameA(IN LPCSTR lpszLongPath, OUT LPSTR lpszShortPath, IN DWORD cchBuffer)
DWORD WINAPI SearchPathA(IN LPCSTR lpPath OPTIONAL, IN LPCSTR lpFileName, IN LPCSTR lpExtension OPTIONAL, IN DWORD nBufferLength, OUT LPSTR lpBuffer, OUT LPSTR *lpFilePart OPTIONAL)
BOOL WINAPI SetDllDirectoryW(IN LPCWSTR lpPathName)
BOOL WINAPI NeedCurrentDirectoryForExePathA(IN LPCSTR ExeName)
DWORD WINAPI GetTempPathW(IN DWORD count, OUT LPWSTR path)
BOOL WINAPI SetDllDirectoryA(IN LPCSTR lpPathName)
UNICODE_STRING BaseDefaultPathAppend
LPWSTR WINAPI BaseComputeProcessDllPath(IN LPWSTR FullPath, IN PVOID Environment)
PVOID gpTermsrvGetWindowsDirectoryA
UINT WINAPI GetWindowsDirectoryA(OUT LPSTR lpBuffer, IN UINT uSize)
UINT WINAPI GetSystemWow64DirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
DWORD WINAPI GetLongPathNameA(IN LPCSTR lpszShortPath, OUT LPSTR lpszLongPath, IN DWORD cchBuffer)
LPWSTR WINAPI BaseComputeProcessExePath(IN LPWSTR FullPath)
LPWSTR WINAPI BasepComputeProcessPath(IN PBASE_SEARCH_PATH_TYPE PathOrder, IN LPWSTR AppName, IN LPVOID Environment)
BOOL WINAPI SetCurrentDirectoryW(IN LPCWSTR lpPathName)
DWORD WINAPI SearchPathW(IN LPCWSTR lpPath OPTIONAL, IN LPCWSTR lpFileName, IN LPCWSTR lpExtension OPTIONAL, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart OPTIONAL)
BASE_SEARCH_PATH_TYPE BaseProcessOrder[BaseSearchPathMax]
BOOL WINAPI BasepIsCurDirAllowedForPlainExeNames(VOID)
BOOL WINAPI FindLFNorSFN_U(IN PWCHAR Path, OUT PWCHAR *First, OUT PWCHAR *Last, IN BOOL UseShort)
BOOL WINAPI IsLongName_U(IN PWCHAR FileName, IN ULONG Length)
UNICODE_STRING BaseWindowsSystemDirectory
PWCHAR WINAPI SkipPathTypeIndicator_U(IN LPWSTR Path)
DWORD WINAPI GetDllDirectoryA(IN DWORD nBufferLength, OUT LPSTR lpBuffer)
DWORD WINAPI GetFullPathNameA(IN LPCSTR lpFileName, IN DWORD nBufferLength, OUT LPSTR lpBuffer, OUT LPSTR *lpFilePart)
UNICODE_STRING BaseDefaultPath
PWCHAR WINAPI BasepEndOfDirName(IN PWCHAR FileName)
UNICODE_STRING NoDefaultCurrentDirectoryInExePath
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
DWORD WINAPI GetLongPathNameW(IN LPCWSTR lpszShortPath, OUT LPWSTR lpszLongPath, IN DWORD cchBuffer)
BOOL WINAPI IsShortName_U(IN PWCHAR Name, IN ULONG Length)
DWORD WINAPI GetShortPathNameW(IN LPCWSTR lpszLongPath, OUT LPWSTR lpszShortPath, IN DWORD cchBuffer)
BOOL WINAPI SetCurrentDirectoryA(IN LPCSTR lpPathName)
UINT WINAPI GetSystemWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
BASE_SEARCH_PATH_TYPE BaseProcessOrderNoCurrent[BaseSearchPathMax]
UNICODE_STRING BaseDllDirectory
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
BOOL WINAPI NeedCurrentDirectoryForExePathW(IN LPCWSTR ExeName)
BASE_SEARCH_PATH_TYPE BaseDllOrderCurrent[BaseCurrentDirPlacementMax][BaseSearchPathMax]
UINT WINAPI GetWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
DWORD WINAPI GetTempPathA(IN DWORD nBufferLength, OUT LPSTR lpBuffer)
UINT WINAPI GetSystemDirectoryA(OUT LPSTR lpBuffer, IN UINT uSize)
PLDR_DATA_TABLE_ENTRY BasepExeLdrEntry
PRTL_CONVERT_STRINGA BasepUnicodeStringTo8BitString
BOOLEAN WINAPI Basep8BitStringToDynamicUnicodeString(OUT PUNICODE_STRING UnicodeString, IN LPCSTR String)
VOID NTAPI BasepLocateExeLdrEntry(IN PLDR_DATA_TABLE_ENTRY Entry, IN PVOID Context, OUT BOOLEAN *StopEnumeration)
PRTL_CONVERT_STRING Basep8BitStringToUnicodeString
PUNICODE_STRING WINAPI Basep8BitStringToStaticUnicodeString(IN LPCSTR String)
PRTL_COUNT_STRING BasepUnicodeStringTo8BitSize
BOOL WINAPI IsDBCSLeadByte(BYTE testchar)
#define UNIMPLEMENTED_DBGBREAK(...)
IN CINT OUT PVOID IN ULONG OUT PULONG ReturnLength
IN PDCB IN POEM_STRING IN PUNICODE_STRING UnicodeName
_Must_inspect_result_ _In_ PFILE_OBJECT _In_ SECURITY_INFORMATION _In_ ULONG _Out_opt_ PULONG LengthNeeded
GLuint GLuint GLsizei count
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
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define OBJ_CASE_INSENSITIVE
NTSYSAPI void WINAPI RtlReleasePebLock(void)
NTSYSAPI NTSTATUS WINAPI RtlInitAnsiStringEx(PANSI_STRING, PCSZ)
NTSYSAPI void WINAPI RtlAcquirePebLock(void)
NTSYSAPI NTSTATUS WINAPI RtlInitUnicodeStringEx(PUNICODE_STRING, PCWSTR)
#define InterlockedCompareExchange
enum _BASE_SEARCH_PATH_TYPE BASE_SEARCH_PATH_TYPE
enum _BASE_SEARCH_PATH_TYPE * PBASE_SEARCH_PATH_TYPE
@ BaseCurrentDirPlacementSafe
@ BaseCurrentDirPlacementMax
@ BaseCurrentDirPlacementInvalid
enum _BASE_CURRENT_DIR_PLACEMENT BASE_CURRENT_DIR_PLACEMENT
NTSTATUS NTAPI LdrEnumerateLoadedModules(_Reserved_ ULONG ReservedFlag, _In_ PLDR_ENUM_CALLBACK EnumProc, _In_opt_ PVOID Context)
PVOID PVOID PWCHAR PVOID Environment
static const char const char * DllPath
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
NTSYSAPI NTSTATUS NTAPI RtlDosSearchPath_Ustr(_In_ ULONG Flags, _In_ PUNICODE_STRING PathString, _In_ PUNICODE_STRING FileNameString, _In_ PUNICODE_STRING ExtensionString, _In_ PUNICODE_STRING CallerBuffer, _Inout_opt_ PUNICODE_STRING DynamicString, _Out_opt_ PUNICODE_STRING *FullNameOut, _Out_opt_ PSIZE_T FilePartSize, _Out_opt_ PSIZE_T LengthNeeded)
NTSYSAPI RTL_PATH_TYPE NTAPI RtlDetermineDosPathNameType_U(_In_ PCWSTR Path)
NTSYSAPI NTSTATUS NTAPI RtlSetCurrentDirectory_U(_In_ PUNICODE_STRING name)
NTSYSAPI NTSTATUS NTAPI RtlEnterCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
NTSYSAPI NTSTATUS NTAPI RtlLeaveCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
NTSYSAPI ULONG NTAPI RtlGetFullPathName_U(_In_ PCWSTR FileName, _In_ ULONG Size, _Out_z_bytecap_(Size) PWSTR Buffer, _Out_opt_ PWSTR *ShortName)
NTSYSAPI NTSTATUS NTAPI RtlQueryEnvironmentVariable_U(_In_opt_ PWSTR Environment, _In_ PCUNICODE_STRING Name, _Out_ PUNICODE_STRING Value)
NTSYSAPI ULONG NTAPI RtlGetCurrentDirectory_U(_In_ ULONG MaximumLength, _Out_bytecap_(MaximumLength) PWSTR Buffer)
#define SEM_FAILCRITICALERRORS
@ RtlPathTypeRootLocalDevice
@ RtlPathTypeDriveRelative
@ RtlPathTypeDriveAbsolute
#define SEM_NOOPENFILEERRORBOX
_Use_decl_annotations_ NTSTATUS NTAPI RtlUnicodeToMultiByteN(_Out_ PCHAR MbString, _In_ ULONG MbSize, _Out_opt_ PULONG ResultSize, _In_ PCWCH UnicodeString, _In_ ULONG UnicodeSize)
_Use_decl_annotations_ NTSTATUS NTAPI RtlUnicodeToMultiByteSize(_Out_ PULONG MbSize, _In_ PCWCH UnicodeString, _In_ ULONG UnicodeSize)
NTSYSAPI NTSTATUS NTAPI NtOpenKey(OUT PHANDLE KeyHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
NTSYSAPI VOID NTAPI RtlFreeAnsiString(PANSI_STRING AnsiString)
@ KeyValuePartialInformation
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive)
NTSYSAPI NTSTATUS NTAPI NtQueryValueKey(IN HANDLE KeyHandle, IN PUNICODE_STRING ValueName, IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, IN PVOID KeyValueInformation, IN ULONG Length, IN PULONG ResultLength)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
struct _KEY_VALUE_PARTIAL_INFORMATION * PKEY_VALUE_PARTIAL_INFORMATION
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define UNICODE_STRING_MAX_CHARS
#define UNICODE_STRING_MAX_BYTES
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a)
#define STATUS_VARIABLE_NOT_FOUND
#define STATUS_NAME_TOO_LONG
DWORD BaseSetLastNTError(IN NTSTATUS Status)
_CRTIMP wchar_t *__cdecl wcsncpy(wchar_t *_Dest, const wchar_t *_Source, size_t _Count)
#define STATUS_BUFFER_TOO_SMALL
PULONG MinorVersion OPTIONAL
UNICODE_STRING FullDllName
#define RTL_CONSTANT_STRING(s)
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlMoveMemory(Destination, Source, Length)
#define STATUS_INVALID_PARAMETER
#define STATUS_NO_SUCH_FILE
#define STATUS_INSUFFICIENT_RESOURCES
#define INVALID_FILE_ATTRIBUTES
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG _Out_ PULONG ResultLength
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING ValueName
_In_ LPCSTR _In_opt_ LPCSTR lpExtension
_In_ LPCSTR _In_opt_ LPCSTR _In_ DWORD _Out_opt_ LPSTR * lpFilePart
_In_ LPCSTR _In_opt_ LPCSTR _In_ DWORD nBufferLength
#define ERROR_FILENAME_EXCED_RANGE
_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
_Must_inspect_result_ _In_ ULONG Flags