Установка драйвера

Тема в разделе "WASM.WIN32", создана пользователем XshStasX, 15 ноя 2010.

  1. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    При помощи каких API функ. можно узнать раздел реестра который асоцирован с драйвером ?
    Тоесть нужен RegistryPath который получет драйвер в DriverEntry.
    Нужно для того чтоб при установки драйвера задать его начальную конфигурацию.
    А также чтоб драйвер при каждой своей загрузки считывал эту информацию.
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
     
  3. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    http://wasm.ru/article.php?article=drvw2k02
     
  4. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    Вот готовый код одного моего старого проекта, написан правдо "на скорую руку" и требует доработки "под себя"
    Код (Text):
    1. const WCHAR reg[]=L"\\registry\\machine\\SYSTEM\\CurrentControlSet\\Services\\";
    2. ///////////////////////////////////////////////////////////////////////////////
    3. DWORD WINAPI LoadDriver(WCHAR* wc_driver)
    4. {
    5.     WCHAR strInjDll[MAX_PATH*2*sizeof(WCHAR)]={0};
    6.         UNICODE_STRING us;
    7.         WCHAR* drivn=wcsrchr(strInjDll,'\\')+1;
    8.         WCHAR* dot=wcsrchr(strInjDll,'.');
    9.         WCHAR serv[MAX_PATH];
    10.         wcscpy(serv,drivn);
    11.         serv[dot-drivn]=0;
    12.         WCHAR regp[MAX_PATH*20]={0};
    13.         wcscpy(regp,reg);
    14.         wcscat(regp,serv);
    15.         RtlInitUnicodeString(&us,regp);
    16.         OBJECT_ATTRIBUTES OA;
    17.         UNICODE_STRING ValueName,nPath;
    18.         ULONG Disposition;
    19.         HANDLE KeyHandle;
    20.         RtlInitUnicodeString(&ValueName,regp);
    21.         InitializeObjectAttributes(&OA, &ValueName,OBJ_CASE_INSENSITIVE,NULL,NULL);
    22.         if(NT_SUCCESS(NtCreateKey(&KeyHandle,KEY_ALL_ACCESS,&OA,0,NULL,REG_OPTION_NON_VOLATILE,&Disposition )))
    23.         {
    24.             RtlInitUnicodeString(&ValueName,L"ImagePath");
    25.             RtlDosPathNameToNtPathName_U(strInjDll,&nPath,NULL,NULL);
    26.             if(NT_SUCCESS(NtSetValueKey(KeyHandle,&ValueName,0,REG_EXPAND_SZ,nPath.Buffer,nPath.Length+sizeof(WCHAR))))
    27.             {
    28.                 RtlInitUnicodeString(&ValueName,L"Type");
    29.                 DWORD type=1;
    30.                 if(NT_SUCCESS(NtSetValueKey(KeyHandle,&ValueName,0,REG_DWORD,&type,sizeof(DWORD))))
    31.                 {
    32.                     RtlInitUnicodeString(&ValueName,L"Start");
    33.                     type=3;
    34.                     if(NT_SUCCESS(NtSetValueKey(KeyHandle,&ValueName,0,REG_DWORD,&type,sizeof(DWORD))))
    35.                     {
    36.                         RtlInitUnicodeString(&ValueName,L"ErrorControl");
    37.                         type=0;
    38.                         if(NT_SUCCESS(NtSetValueKey(KeyHandle,&ValueName,0,REG_DWORD,&type,sizeof(DWORD))))
    39.                         {
    40.                             RtlInitUnicodeString(&ValueName,L"DisplayName");
    41.                             RtlInitUnicodeString(&nPath,L"PBDOWNFORCE_SERVICE");
    42.                             if(NT_SUCCESS(NtSetValueKey(KeyHandle,&ValueName,0,REG_EXPAND_SZ,nPath.Buffer,nPath.Length+sizeof(WCHAR))))
    43.                             {
    44.                                 NtClose(KeyHandle);
    45.                                 NTSTATUS st;
    46.                                 st=NtLoadDriver(&us);
    47.                                 if(NT_SUCCESS(st))
    48.                                 {
    49.                                     OutputDebugString(">>Driver Loaded");
    50.                                     return STATUS_SUCCESS;
    51.                                 }
    52.                                 else
    53.                                 {
    54.                                     OutputDebugString(">>Error:NtLoadDriver");
    55.                                 }
    56.                                 return 0;
    57.                             }
    58.                         }
    59.                     } else OutputDebugString(">>Error:NtSetValueKey (subkey)");
    60.                 } else OutputDebugString(">>Error:NtSetValueKey");
    61.                 NtClose(KeyHandle);
    62.             }else OutputDebugString(">>Error:NtCreateKey");
    63.         }
    64. return 0;
    65. }
    66.  
    67. /////////////////////////////////////////////////////////////////////////////////////////////////////////
    68. DWORD WINAPI UnLoadDriver(CHAR* strNameDll)
    69. {
    70.     UNICODE_STRING us;
    71.     *strchr(strNameDll,'.')=0;
    72.     WCHAR serv[512]={0};
    73.     mbstowcs(serv,strNameDll, sizeof(serv)-1);
    74.     WCHAR regp[MAX_PATH*20]={0};
    75.     wcscpy(regp,reg);
    76.     wcscat(regp,serv);
    77.     RtlInitUnicodeString(&us,regp);
    78.     NTSTATUS st;
    79.     st=NtUnloadDriver(&us);
    80.     if(NT_SUCCESS(st))
    81.     {
    82.         OutputDebugString(">>Driver Unloaded");
    83.     }
    84.     else
    85.     {
    86.         OutputDebugString(">>Error:NtUnLoadDriver");   
    87.     }
    88.     return 0;
    89. }