/*++ 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 #include #include #include #include #include #include #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; }