Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Domyślnie modyfikacja schematu jest wyłączona na wszystkich kontrolerach domeny systemu Windows 2000. Możliwość aktualizacji schematu jest kontrolowana przez następującą wartość rejestru na głównym kontrolerze domeny schematu:
HKEY_LOCAL_MACHINE
System
CurrentControlSet
Services
NTDS
Parameters
Schema Update Allowed
Ta wartość rejestru jest wartością REG_DWORD. Jeśli ta wartość nie jest obecna lub zawiera zero (0), modyfikacja schematu jest wyłączona. Jeśli ta wartość jest obecna i zawiera wartość inną niż zero, modyfikacja schematu jest włączona.
Przystawka MMC Menedżera schematu zapewnia użytkownikowi możliwość ręcznego włączania lub wyłączania modyfikacji schematu. Modyfikowanie schematu można włączyć lub wyłączyć programowo, modyfikując tę wartość rejestru na głównym kontrolerze domeny schematu.
Poniższa funkcja w języku C++ pokazuje, jak sprawdzić, czy schemat może być zmodyfikowany na wskazanym wzorcu zarządzania schematem.
HRESULT IsSchemaUpdateEnabled(
LPTSTR pszSchemaMasterComputerName,
BOOL *pfEnabled)
{
*pfEnabled = FALSE;
LPTSTR szPrefix = "\\\\";
LPTSTR pszPath = new TCHAR[lstrlen(szPrefix) +
lstrlen(pszSchemaMasterComputerName) + 1];
if(!pszPath)
{
return E_OUTOFMEMORY;
}
HRESULT hr = E_FAIL;
LONG lReturn;
HKEY hKeyMachine;
tcscpy_s(pszPath, szPrefix);
tcscat_s(pszPath, pszSchemaMasterComputerName);
lReturn = RegConnectRegistry(
pszPath,
HKEY_LOCAL_MACHINE,
&hKeyMachine);
delete [] pszPath;
if (ERROR_SUCCESS == lReturn)
{
HKEY hKeyParameters;
LPTSTR szKeyPath =
TEXT("System\\CurrentControlSet\\Services\\NTDS\\Parameters");
LPTSTR szValueName = TEXT("Schema Update Allowed");
lReturn = RegOpenKeyEx(
hKeyMachine,
szKeyPath,
0,
KEY_READ,
&hKeyParameters);
if (ERROR_SUCCESS == lReturn)
{
DWORD dwType;
DWORD dwValue;
DWORD dwSize;
dwSize = sizeof(dwValue);
lReturn = RegQueryValueEx(
hKeyParameters,
szValueName,
0,
&dwType,
(LPBYTE)&dwValue,
&dwSize);
if (ERROR_SUCCESS == lReturn)
{
*pfEnabled = (0 != dwValue);
hr = S_OK;
}
RegCloseKey(hKeyParameters);
}
RegCloseKey(hKeyMachine);
}
return hr;
}
Poniższa funkcja języka C++ pokazuje, jak włączyć lub wyłączyć modyfikację schematu w określonym wzorcu schematu.
HRESULT EnableSchemaUpdate(
LPTSTR pszSchemaMasterComputerName,
BOOL fEnabled)
{
LPTSTR szPrefix = "\\\\";
LPTSTR pszPath = new TCHAR[lstrlen(szPrefix) +
lstrlen(pszSchemaMasterComputerName) + 1];
if(!pszPath)
{
return E_OUTOFMEMORY;
}
HRESULT hr = E_FAIL;
LONG lReturn;
HKEY hKeyMachine;
strcpy_s(pszPath, szPrefix);
strcat_s(pszPath, pszSchemaMasterComputerName);
lReturn = RegConnectRegistry(
pszPath,
HKEY_LOCAL_MACHINE,
&hKeyMachine);
delete [] pszPath;
if (ERROR_SUCCESS == lReturn)
{
HKEY hKeyParameters;
LPTSTR szRelKeyPath =
TEXT("System\\CurrentControlSet\\Services\\NTDS\\Parameters");
LPTSTR szValueName = TEXT("Schema Update Allowed");
lReturn = RegOpenKeyEx(
hKeyMachine,
szRelKeyPath,
0,
KEY_SET_VALUE,
&hKeyParameters);
if (ERROR_SUCCESS == lReturn)
{
DWORD dwValue;
DWORD dwSize;
if(fEnabled)
{
dwValue = 1;
}
else
{
dwValue = 0;
}
dwSize = sizeof(dwValue);
lReturn = RegSetValueEx(
hKeyParameters,
szValueName,
0L,
REG_DWORD,
(LPBYTE)&dwValue,
dwSize);
if (ERROR_SUCCESS == lReturn)
{
hr = S_OK;
}
RegCloseKey(hKeyParameters);
}
RegCloseKey(hKeyMachine);
}
return hr;
}