Value Type Contents
Type DWORD 1
Start DWORD 2 as per Table 11.4
DisplayName REG_SZ AbcXyz' driver name
ErrorControl DWORD 1 as per Table 11.5

Conclusion

This chapter first looked at how to install WDM device drivers using INF files. It then described the installation process for NT style kernel mode drivers. The device driver management tools were discussed. The Servicer program can start and stop NT style drivers.

Our tour of the core device driver functionality continues in the next chapter by looking at how to interact with the Windows Management Instrumentation system.

Listing 11.2 NTMnstall.Cpp

// install.Inf – NT driver install program

// Copyright © 1998 Chris Cant, PHD Computer Consultants Ltd

// This is not a complete program

void InstallDriver(CString DriverName, CString DriverFromPath) {

 //////////////////////////////////////////////////////////////////

 // Get System32 directory

 _TCHAR System32Directory[_MAX_PATH];

 if (0==GetSystemDirectory(System32Directory,_MAX_PATH)) {

  AfxMessageBox('Could not find Windows system directory');

  return;

 }

 ///////////////////////////////////////////////////////////////////

 // Copy driver.sys file across

 CString DriverFullPath = System32Directory+'\Drivers\'+DriverName+'.sys';

 if (0==CopyFile( DriverFromPath, DriverFullPath, FALSE)) // Overwrite OK

 {

  CString Msg;

  Msg.Format('Could not copy %s to %s', DriverFullPath, Drivers);

  AfxMessageBox(Msg);

  return;

 }

 ///////////////////////////////////////////////////////////////////

 // Create driver (or stop existing driver)

 if (!CreateDriver(DriverName, DriverFullPath)) return;

 ///////////////////////////////////////////////////////////////////

 // Create/Open driver registry key and set its values

 //Overwrite registry values written in driver creation

 HKEY mru;

 DWORD disposition;

 if (RegCreateKeyEx(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Services\'+DriverName,

  0, '', 0, KEY_ALL_ACCESS, NULL, &mru, &disposition) != ERROR_SUCCESS) {

  AfxMessageBox('Could not create driver registry key');

  return;

 }

 // Delete ImagePath

 RegDeleteValue(mru,'ImagePath');

 // Delete DisplayName

 RegDeleteValue(mru, 'DisplayName');

 // ErrorControl

 DWORD dwRegValue = SERVICE_ERROR_NORMAL;

 if (RegSetValueEx(mru, 'ErrorControl', 0, REG_DWORD, (CONST BYTE*)&dwRegValue, sizeof(DWORD)) != ERROR_SUCCESS) {

  AfxMessageBox('Could not create driver registry value ErrorControl');

  return;

 }

 // Start

 dwRegValue = SERVICE_AUTO_START;

 if (RegSetValueEx(mru, 'Start' , 0, REG_DWORD, (CONST BYTE*)&dwRegValue, sizeof(DWORD)) != ERROR_SUCCESS) {

  AfxMessageBox('Could not create driver registry value Start');

  return;

 }

 // Type

 dwRegValue = SERVICE_KERNEL_DRIVER;

 if (RegSetValueEx(mru, 'Type', 0, REG_DWORD, (CONST BYTE*)&dwRegValue, sizeof(DWORD)) != ERROR_SUCCESS) {

  AfxMessageBox('Could not create driver registry value Type');

  return;

 }

 // DependOnGroup

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату
×