динамическая загрузка драйвера

From
Kirill Neznamov (2:5025/32.88)
To
All
Date
2002-01-08T15:36Z
Area
SU.WINDOWS.NT.PROG
Доброе время суток All!

Kак-то раз я здесь спрашивал про subj.Меня просветили я вроде все понял и
написал прогу для тестирования драйвера(см ниже).Так вот возникла одна
проблемка - что надо и где написать в реестре чтобы usermode приложение
могло открыть мой драйвер по CreateFile()? Так как здесь что-то не работает..
После CreateFile() GetLastError() возвращает ERROR_INVALID_FUNCTION.Где
предположительно могут быть грабли?

#include <windows.h>
#include <winsvc.h>
#include <winbase.h>
#include "drvioctl.h"
#include <memory.h>

#define SNIFF_TYPE 40000

// The IOCTL function codes from 0x800 to 0xFFF are for customer use.

#define IOCTL_SNIFF_MAPUSERMEM \
    CTL_CODE( SNIFF_TYPE, 0x900, METHOD_BUFFERED, FILE_ANY_ACCESS )

#define IOCTL_SNIFF_UNMAPUSERMEM \
    CTL_CODE( SNIFF_TYPE, 0x901, METHOD_BUFFERED, FILE_ANY_ACCESS )

void main(void)
{
 SC_HANDLE hSCManager;
 SC_HANDLE hService;
 SERVICE_STATUS ServiceStatus;
 BOOL flag;
 DWORD err;
 DWORD *mem;
 HANDLE hdrv;
 TCHAR completeDeviceName[64];
 wsprintf( completeDeviceName, TEXT("\\\\.\\%s"), "sniffdrv");

 hSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
 hService = CreateService( hSCManager,
                           "sniffdrv",
                           "sniffdrv",
                           SERVICE_ALL_ACCESS,
                           SERVICE_KERNEL_DRIVER,
                           SERVICE_DEMAND_START,
                           SERVICE_ERROR_NORMAL,
                           "c:\\winnt\\system32\\drivers\\sniffdrv.sys",
                           NULL,
                           NULL,NULL,NULL,NULL);
  if(!hService)
    hService=OpenService(hSCManager,"SNIFFDRV",SERVICE_ALL_ACCESS);
 flag=StartService( hService, 0, NULL );

 hdrv=CreateFile(completeDeviceName,
                 GENERIC_READ | GENERIC_WRITE,
                 0,
                 NULL,
                 OPEN_EXISTING,
                 FILE_ATTRIBUTE_NORMAL,
                 NULL);
  err=GetLastError();

 ControlService(hService,SERVICE_CONTROL_STOP,&ServiceStatus);
 CloseServiceHandle( hService );
 CloseServiceHandle( hSCManager );
}


С наилучшими пожеланиями,
                         KiR                    [Team BuZZ] [Team GoA ]
--- TM-Ed 1.14+
 * Origin: Кто не хочет - ищет причину,кто хочет - ищет возможность.                                 Goa_Dream_Station (2:5025/32.88)