From 68d8ade667915867e1712807480e8c56a06c0c39 Mon Sep 17 00:00:00 2001 From: Fritz Elfert Date: Fri, 29 Dec 2017 18:56:11 +0100 Subject: [PATCH] Speed up mount operation by putting winfsp network provider at the head of network providers --- src/dll/np.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/dll/np.c b/src/dll/np.c index dfa38f7b..bc6d1a03 100644 --- a/src/dll/np.c +++ b/src/dll/np.c @@ -1016,7 +1016,7 @@ NTSTATUS FspNpRegister(VOID) WCHAR ProviderPath[MAX_PATH]; WCHAR RegBuffer[1024]; PWSTR P, Part; - DWORD RegResult, RegType, RegBufferSize; + DWORD RegResult, RegType, RegBufferSize, RegBufferOffset; HKEY RegKey; BOOLEAN FoundProvider; @@ -1082,15 +1082,16 @@ NTSTATUS FspNpRegister(VOID) return FspNtStatusFromWin32(RegResult); RegBufferSize = sizeof RegBuffer - sizeof L"," FSP_NP_NAME; + RegBufferOffset = lstrlenW(L"," FSP_NP_NAME); RegResult = RegQueryValueExW(RegKey, - L"ProviderOrder", 0, &RegType, (PVOID)RegBuffer, &RegBufferSize); + L"ProviderOrder", 0, &RegType, (PVOID)&RegBuffer[RegBufferOffset], &RegBufferSize); if (ERROR_SUCCESS != RegResult) goto close_and_exit; RegBufferSize /= sizeof(WCHAR); FoundProvider = FALSE; - RegBuffer[RegBufferSize] = L'\0'; - P = RegBuffer, Part = P; + RegBuffer[RegBufferSize + RegBufferOffset] = L'\0'; + P = &RegBuffer[RegBufferOffset], Part = P; do { if (L',' == *P || '\0' == *P) @@ -1107,8 +1108,7 @@ NTSTATUS FspNpRegister(VOID) if (!FoundProvider) { - P--; - memcpy(P, L"," FSP_NP_NAME, sizeof L"," FSP_NP_NAME); + memcpy((PWSTR)RegBuffer, L"" FSP_NP_NAME ",", sizeof L"" FSP_NP_NAME); RegBufferSize = lstrlenW(RegBuffer); RegBufferSize++;