windows-nt/Source/XPSP1/NT/base/fs/rdr2/smbrdr/regmuck.c
2020-09-26 16:20:57 +08:00

258 lines
8.4 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
Copyright (c) 1994 Microsoft Corporation
Module Name:
regmuck.c
Abstract:
This module contains the routines for mucking with the registry for smbrdr.exe
Author:
Revision History:
--*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include "smbrdr.h"
// Global Registry key definitions for the new Redirector
// the key definition is relative to HKEY_LOCAL_MACHINE
#define RDBSS_REGISTRY_KEY L"System\\CurrentControlSet\\Services\\Rdbss"
#define MRXSMB_REGISTRY_KEY L"System\\CurrentControlSet\\Services\\MRxSmb"
#define MRXPROXY_REGISTRY_KEY L"System\\CurrentControlSet\\Services\\Reflctor"
//most of the keynames are not #defined even if they were it wouldn't be here
//#define MINI_REDIRECTORS L"MiniRedirectors"
#define LAST_LOAD_STATUS L"LastLoadStatus"
#define SwRxSetRegX(KEYHANDLE,NAME,REGTYPE,VALUEASPTR,VALUESIZE) { \
TempStatus = RegSetValueEx( \
KEYHANDLE, \
NAME, \
0, \
REGTYPE, \
VALUEASPTR, \
VALUESIZE); \
if (TempStatus != ERROR_SUCCESS) { \
printf("ERROR (%d) in adjusting the registry: cant store %ws\n", \
TempStatus,NAME); \
RegCloseKey(KEYHANDLE); \
return(TempStatus); \
} \
}
#define SwRxSetRegDword(KEYHANDLE,NAME,VALUE) { \
DWORD DwordValue = VALUE; \
SwRxSetRegX(KEYHANDLE,NAME,REG_DWORD,((PCHAR)&DwordValue),sizeof(DWORD)); \
}
#define SwRxSetRegSz(KEYHANDLE,NAME,VALUE) { \
SwRxSetRegX(KEYHANDLE,NAME,REG_SZ,((PCHAR)VALUE),sizeof(VALUE)); \
}
#define SwRxSetRegExpandSz(KEYHANDLE,NAME,VALUE) { \
SwRxSetRegX(KEYHANDLE,NAME,REG_EXPAND_SZ,((PCHAR)VALUE),sizeof(VALUE)); \
}
#define SwRxSetRegMultiSz(KEYHANDLE,NAME,VALUE) { \
SwRxSetRegX(KEYHANDLE,NAME,REG_MULTI_SZ,((PCHAR)VALUE),sizeof(VALUE)); \
}
#define SwRxCreateKey(KEYHANDLE,KEYNAME) { \
DWORD Disposition; \
TempStatus = RegCreateKeyEx ( \
HKEY_LOCAL_MACHINE, \
KEYNAME, \
0, \
NULL, \
0, \
KEY_ALL_ACCESS, \
NULL, \
&KEYHANDLE, \
&Disposition \
); \
\
if (TempStatus != ERROR_SUCCESS) { \
printf("ERROR (%d) in adjusting the registry: cant create key %ws\n", \
TempStatus,KEYNAME); \
return(TempStatus); \
} \
}
extern BOOLEAN SwRxProxyEnabled;
NET_API_STATUS
SwRxRdr2Muck(
void
)
{
NET_API_STATUS TempStatus;
HKEY hRedirectorKey;
printf("Adjusting the registry for Rdr2\n");
//altho the code for the three different drivers is essentially similar, it is
// not combined so that it can be changed more readily
if (SwRxProxyEnabled) {
//\registry\machine\system\currentcontrolset\services\reflctor
// Type = REG_DWORD 0x00000002
// Start = REG_DWORD 0x00000003
// ErrorControl = REG_DWORD 0x00000001
// ImagePath = REG_EXPAND_SZ \SystemRoot\System32\drivers\reflctor.sys
// DisplayName = mrxproxy
// Group = Network
// Linkage
// Disabled
// Parameters
// Security
SwRxCreateKey(hRedirectorKey,MRXPROXY_REGISTRY_KEY L"\\Linkage\\Disabled");
RegCloseKey(hRedirectorKey);
SwRxCreateKey(hRedirectorKey,MRXPROXY_REGISTRY_KEY L"\\Parameters");
RegCloseKey(hRedirectorKey);
SwRxCreateKey(hRedirectorKey,MRXPROXY_REGISTRY_KEY L"\\Security");
RegCloseKey(hRedirectorKey);
SwRxCreateKey(hRedirectorKey,MRXPROXY_REGISTRY_KEY);
SwRxSetRegDword(hRedirectorKey,L"Type",0x00000002);
SwRxSetRegDword(hRedirectorKey,L"Start",0x00000003);
SwRxSetRegDword(hRedirectorKey,L"ErrorControl",0x00000001);
SwRxSetRegSz(hRedirectorKey,L"DisplayName",L"Reflctor");
SwRxSetRegSz(hRedirectorKey,L"Group",L"Network");
SwRxSetRegExpandSz(hRedirectorKey,L"ImagePath",L"System32\\drivers\\reflctor.sys");
RegCloseKey(hRedirectorKey);
}
printf("no longer muck with mrxsmb or rdbss\n");
#if 0
//\registry\machine\system\currentcontrolset\services\mrxsmb
// Type = REG_DWORD 0x00000002
// Start = REG_DWORD 0x00000003
// ErrorControl = REG_DWORD 0x00000001
// ImagePath = REG_EXPAND_SZ \SystemRoot\System32\drivers\mrxsmb.sys
// DisplayName = mrxsmb
// Group = Network
// Linkage
// Disabled
// Parameters
// Security
SwRxCreateKey(hRedirectorKey,MRXSMB_REGISTRY_KEY L"\\Linkage\\Disabled");
RegCloseKey(hRedirectorKey);
SwRxCreateKey(hRedirectorKey,MRXSMB_REGISTRY_KEY L"\\Parameters");
RegCloseKey(hRedirectorKey);
SwRxCreateKey(hRedirectorKey,MRXSMB_REGISTRY_KEY L"\\Security");
RegCloseKey(hRedirectorKey);
SwRxCreateKey(hRedirectorKey,MRXSMB_REGISTRY_KEY);
SwRxSetRegDword(hRedirectorKey,L"Type",0x00000002);
SwRxSetRegDword(hRedirectorKey,L"Start",0x00000003);
SwRxSetRegDword(hRedirectorKey,L"ErrorControl",0x00000001);
SwRxSetRegSz(hRedirectorKey,L"DisplayName",L"MRxSmb");
SwRxSetRegSz(hRedirectorKey,L"Group",L"Network");
SwRxSetRegExpandSz(hRedirectorKey,L"ImagePath",L"\\SystemRoot\\System32\\drivers\\mrxsmb.sys");
SwRxSetRegDword(hRedirectorKey,LAST_LOAD_STATUS,0);
RegCloseKey(hRedirectorKey);
//\registry\machine\system\currentcontrolset\services\rdbss
// Type = REG_DWORD 0x00000002
// Start = REG_DWORD 0x00000003
// ErrorControl = REG_DWORD 0x00000001
// ImagePath = REG_EXPAND_SZ \SystemRoot\System32\drivers\rdbss.sys
// DisplayName = Rdbss
// Group = Network
// LastLoadStatus = REG_DWORD 0x0
// Linkage
// Disabled
// Parameters
// Security
SwRxCreateKey(hRedirectorKey,RDBSS_REGISTRY_KEY L"\\Linkage\\Disabled");
RegCloseKey(hRedirectorKey);
SwRxCreateKey(hRedirectorKey,RDBSS_REGISTRY_KEY L"\\Parameters");
RegCloseKey(hRedirectorKey);
SwRxCreateKey(hRedirectorKey,RDBSS_REGISTRY_KEY L"\\Security");
RegCloseKey(hRedirectorKey);
SwRxCreateKey(hRedirectorKey,RDBSS_REGISTRY_KEY);
SwRxSetRegDword(hRedirectorKey,L"Type",0x00000002);
SwRxSetRegDword(hRedirectorKey,L"Start",0x00000003);
SwRxSetRegDword(hRedirectorKey,L"ErrorControl",0x00000001);
SwRxSetRegSz(hRedirectorKey,L"DisplayName",L"Rdbss");
SwRxSetRegSz(hRedirectorKey,L"Group",L"Network");
SwRxSetRegExpandSz(hRedirectorKey,L"ImagePath",L"\\SystemRoot\\System32\\drivers\\rdbss.sys");
RegCloseKey(hRedirectorKey);
////now put in the new minirdr enumeration
///SwRxCreateKey(hRedirectorKey,RDBSS_REGISTRY_KEY L"\\MiniRdrs");
//SwRxSetRegDword(hRedirectorKey,L"MRxSmb",0xbaadf00d);
//SwRxSetRegDword(hRedirectorKey,L"MRxFtp00",0xbaadf10d);
//SwRxSetRegDword(hRedirectorKey,L"MRxNfs",0xbaadf20d);
//SwRxSetRegDword(hRedirectorKey,L"MRxNcp6",0xbaadf30d);
//RegCloseKey(hRedirectorKey);
#endif
return ERROR_SUCCESS;
}
NET_API_STATUS
SwRxRdr1Muck(
void
)
{
NET_API_STATUS TempStatus;
HKEY hRedirectorKey;
DWORD FinalStatus;
printf("Adjusting the registry for Rdr1...........\n");
TempStatus = RegOpenKeyEx(
HKEY_LOCAL_MACHINE,
MRXSMB_REGISTRY_KEY,
0,
KEY_ALL_ACCESS,
&hRedirectorKey);
if (TempStatus == ERROR_SUCCESS) {
//the value 0 would mean load rdr2; the value 0x15 (ERROR_NOT_READY)
//would mean load rdr1 BUT ONLY IS THE RDR IS NOT RUNNING. 0x1 means
//start rdr1 on the next load
SwRxSetRegDword(hRedirectorKey,LAST_LOAD_STATUS,0x1);
RegCloseKey(hRedirectorKey);
}
return ERROR_SUCCESS;
}