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;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|