Speed up mount operation by putting winfsp network provider at the head of network providers

This commit is contained in:
Fritz Elfert 2017-12-29 18:56:11 +01:00
parent d9c450ecf4
commit 68d8ade667

View File

@ -1016,7 +1016,7 @@ NTSTATUS FspNpRegister(VOID)
WCHAR ProviderPath[MAX_PATH]; WCHAR ProviderPath[MAX_PATH];
WCHAR RegBuffer[1024]; WCHAR RegBuffer[1024];
PWSTR P, Part; PWSTR P, Part;
DWORD RegResult, RegType, RegBufferSize; DWORD RegResult, RegType, RegBufferSize, RegBufferOffset;
HKEY RegKey; HKEY RegKey;
BOOLEAN FoundProvider; BOOLEAN FoundProvider;
@ -1082,15 +1082,16 @@ NTSTATUS FspNpRegister(VOID)
return FspNtStatusFromWin32(RegResult); return FspNtStatusFromWin32(RegResult);
RegBufferSize = sizeof RegBuffer - sizeof L"," FSP_NP_NAME; RegBufferSize = sizeof RegBuffer - sizeof L"," FSP_NP_NAME;
RegBufferOffset = lstrlenW(L"," FSP_NP_NAME);
RegResult = RegQueryValueExW(RegKey, RegResult = RegQueryValueExW(RegKey,
L"ProviderOrder", 0, &RegType, (PVOID)RegBuffer, &RegBufferSize); L"ProviderOrder", 0, &RegType, (PVOID)&RegBuffer[RegBufferOffset], &RegBufferSize);
if (ERROR_SUCCESS != RegResult) if (ERROR_SUCCESS != RegResult)
goto close_and_exit; goto close_and_exit;
RegBufferSize /= sizeof(WCHAR); RegBufferSize /= sizeof(WCHAR);
FoundProvider = FALSE; FoundProvider = FALSE;
RegBuffer[RegBufferSize] = L'\0'; RegBuffer[RegBufferSize + RegBufferOffset] = L'\0';
P = RegBuffer, Part = P; P = &RegBuffer[RegBufferOffset], Part = P;
do do
{ {
if (L',' == *P || '\0' == *P) if (L',' == *P || '\0' == *P)
@ -1107,8 +1108,7 @@ NTSTATUS FspNpRegister(VOID)
if (!FoundProvider) if (!FoundProvider)
{ {
P--; memcpy((PWSTR)RegBuffer, L"" FSP_NP_NAME ",", sizeof L"" FSP_NP_NAME);
memcpy(P, L"," FSP_NP_NAME, sizeof L"," FSP_NP_NAME);
RegBufferSize = lstrlenW(RegBuffer); RegBufferSize = lstrlenW(RegBuffer);
RegBufferSize++; RegBufferSize++;