Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: Динамическая загрузка WDM  (Прочитано 46537 раз)
0 Пользователей и 1 Гость смотрят эту тему.
dvp
Гость
« Ответ #30 : 30-06-2003 16:53 » 

Пройтись как: ну например ZwQuerySystemInformation, так мне же не вернуться процессы, только что выгруженные, а та софтина откуда то это извлекает....
Или я чего то не понял?
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #31 : 01-07-2003 10:14 » 

Вся наша дискуссия пропала из-за неразберихи с провайдерами.
Вчера вечером я запостил сюда такую вещь:

Указатель на PsActiveProcessHead(он является головой списка всех процессов в системе) из ядра не экспортируется,  но можно получить указатель на PsInitialSystemProcess, который указывает на процесс SYSTEM, получить этот указатель в ядре просто- надо взять PsGetCurrentProcess() в DriverEntry, так как драйвера грузятся в контексте системного потока,  а в структуре EPROCESS, на которую указывает PsInitialSystemProcess, указатель Blink поля с именем ActiveProcessLinks( смещение 0xA0 в Win2k) указывает на PsActiveProcessHead.
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #32 : 01-07-2003 12:39 » 

А вот новая инфа про установку драйвера- есть в DDK пример Devcon там есть ф-ция cmdInstall, которая позволяет при наличии inf файла загрузить драйвер для устройства даже при отсутствиии этого устройства и даже вроде как создать стек для устройства. Вот ее текст, полный пример смотрите в DDK

int cmdInstall(LPCTSTR BaseName,LPCTSTR Machine,int argc,TCHAR* argv[])
/*++

Routine Description:

    INSTALL
    install a device manually

Arguments:

    BaseName  - name of executable
    Machine   - machine name, must be NULL
    argc/argv - remaining parameters

Return Value:

    EXIT_xxxx

--*/
{
    HDEVINFO DeviceInfoSet = INVALID_HANDLE_VALUE;
    SP_DEVINFO_DATA DeviceInfoData;
    GUID ClassGUID;
    TCHAR ClassName[MAX_CLASS_NAME_LEN];
    TCHAR hwIdList[LINE_LEN+4];
    TCHAR InfPath[MAX_PATH];
    DWORD err;
    int failcode = EXIT_FAIL;
    BOOL reboot = FALSE;
    LPCTSTR hwid = NULL;
    LPCTSTR inf = NULL;
    DWORD flags = 0;
    DWORD len;

    if(Machine) {
        //
        // must be local machine
        //
        return EXIT_USAGE;
    }
    if(argc<2) {
        //
        // at least HWID required
        //
        return EXIT_USAGE;
    }
    inf = argv[0];
    if(!inf[0]) {
        return EXIT_USAGE;
    }

    hwid = argv[1];
    if(!hwid[0]) {
        return EXIT_USAGE;
    }

    //
    // Inf must be a full pathname
    //
    if(GetFullPathName(inf,MAX_PATH,InfPath,NULL) >= MAX_PATH) {
        //
        // inf pathname too long
        //
        return EXIT_FAIL;
    }

    //
    // List of hardware ID's must be double zero-terminated
    //
    ZeroMemory(hwIdList,sizeof(hwIdList));
    lstrcpyn(hwIdList,hwid,LINE_LEN);

    //
    // Use the INF File to extract the Class GUID.
    //
    if (!SetupDiGetINFClass(InfPath,&ClassGUID,ClassName,sizeof(ClassName)/sizeof(ClassName[0]),0))
    {
        goto final;
    }

    //
    // Create the container for the to-be-created Device Information Element.
    //
    DeviceInfoSet = SetupDiCreateDeviceInfoList(&ClassGUID,0);
    if(DeviceInfoSet == INVALID_HANDLE_VALUE)
    {
        goto final;
    }

    //
    // Now create the element.
    // Use the Class GUID and Name from the INF file.
    //
    DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
    if (!SetupDiCreateDeviceInfo(DeviceInfoSet,
        ClassName,
        &ClassGUID,
        NULL,
        0,
        DICD_GENERATE_ID,
        &DeviceInfoData))
    {
        goto final;
    }

    //
    // Add the HardwareID to the Device's HardwareID property.
    //
    if(!SetupDiSetDeviceRegistryProperty(DeviceInfoSet,
        &DeviceInfoData,
        SPDRP_HARDWAREID,
        (LPBYTE)hwIdList,
        (lstrlen(hwIdList)+1+1)*sizeof(TCHAR)))
    {
        goto final;
    }

    //
    // Transform the registry element into an actual devnode
    // in the PnP HW tree.
    //
    if (!SetupDiCallClassInstaller(DIF_REGISTERDEVICE,
        DeviceInfoSet,
        &DeviceInfoData))
    {
        goto final;
    }

    FormatToStream(stdout,MSG_INSTALL_UPDATE);
    //
    // update the driver for the device we just created
    //
    failcode = cmdUpdate(BaseName,Machine,argc,argv);

final:

    if (DeviceInfoSet != INVALID_HANDLE_VALUE) {
        SetupDiDestroyDeviceInfoList(DeviceInfoSet);
    }

    return failcode;
}
Записан
V.L.
Гость
« Ответ #33 : 02-07-2003 03:17 » 

Раз пример из ДДК то это хоть как-то должно работать. Тем более в сопроводиловке сказано чтоэто для Windows 2000 (пользуюсь ДДК от 2000). Да и PnP особенности вроде учитываются. Надо попробовать на досуге.
Записан
dvp
Гость
« Ответ #34 : 03-07-2003 11:45 » 

а в 98?
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #35 : 03-07-2003 13:40 » 

Цитата: dvp
а в 98?


Не проверяли. Но работать в принципе может, надо проверять. Но от 98 надо отходить- это полный анахронизм.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #36 : 03-07-2003 13:47 » new

Как и от всей линейки 9х - еще ИМХО год два и задач под них попросту не будет

Как пример - драйвер Epson 300 как домашний не делали для 2000
А дреайверов для полупромышленных HP сегодня уже нет для миллениумов  Показываю язык
Записан

А птичку нашу прошу не обижать!!!
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines