258 lines
8.4 KiB
C
258 lines
8.4 KiB
C
/*++
|
||
|
||
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;
|
||
|
||
}
|
||
|
||
|