mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 08:53:01 -05:00
Merge branch 'providerorder' of https://github.com/felfert/winfsp into felfert-providerorder
This commit is contained in:
commit
886b7cf9f7
26
src/dll/np.c
26
src/dll/np.c
@ -35,6 +35,12 @@
|
|||||||
*/
|
*/
|
||||||
#define FSP_NP_CREDENTIAL_MANAGER
|
#define FSP_NP_CREDENTIAL_MANAGER
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Define the following macro to register ourselves as the first network provider.
|
||||||
|
* Otherwise we will be registered as the last network provider.
|
||||||
|
*/
|
||||||
|
#define FSP_NP_ORDER_FIRST
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
FSP_NP_CREDENTIALS_NONE = 0,
|
FSP_NP_CREDENTIALS_NONE = 0,
|
||||||
@ -1016,7 +1022,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 +1088,20 @@ 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;
|
||||||
|
#ifdef FSP_NP_ORDER_FIRST
|
||||||
|
RegBufferOffset = sizeof "" FSP_NP_NAME;
|
||||||
|
#else
|
||||||
|
RegBufferOffset = 0;
|
||||||
|
#endif
|
||||||
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 +1118,11 @@ NTSTATUS FspNpRegister(VOID)
|
|||||||
|
|
||||||
if (!FoundProvider)
|
if (!FoundProvider)
|
||||||
{
|
{
|
||||||
P--;
|
#ifdef FSP_NP_ORDER_FIRST
|
||||||
memcpy(P, L"," FSP_NP_NAME, sizeof L"," FSP_NP_NAME);
|
memcpy((PWSTR)RegBuffer, L"" FSP_NP_NAME ",", sizeof L"" FSP_NP_NAME);
|
||||||
|
#else
|
||||||
|
memcpy(--P, L"," FSP_NP_NAME, sizeof L"," FSP_NP_NAME);
|
||||||
|
#endif
|
||||||
|
|
||||||
RegBufferSize = lstrlenW(RegBuffer);
|
RegBufferSize = lstrlenW(RegBuffer);
|
||||||
RegBufferSize++;
|
RegBufferSize++;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user