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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: system_thread_exception_not_handled STATUS_BREAKPOINT  (Прочитано 544 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Ллирик
Постоялец

ru
Offline Offline
Пол: Мужской

« : 16-10-2018 00:10 » 

Код: (C)
#include "MKJoy.h"

NTSTATUS DriverEntry (PDRIVER_OBJECT, PUNICODE_STRING);

#ifdef ALLOC_PRAGMA
#pragma alloc_text (INIT, DriverEntry)
#pragma alloc_text (PAGE, MKJoy_AddDevice)
#pragma alloc_text (PAGE, MKJoy_PnP)
#pragma alloc_text (PAGE, MKJoy_Power)
#pragma alloc_text (PAGE, MKJoy_Unload)
#endif

NTSTATUS
DriverEntry (
    IN  PDRIVER_OBJECT  DriverObject,
    IN  PUNICODE_STRING RegistryPath
    )
/*++
Routine Description:

    Initialize the entry points of the driver.

--*/

{

        HID_MINIDRIVER_REGISTRATION reg;
    //
    // Fill in all the dispatch entry points with the pass through function
    // and the explicitly fill in the functions we are going to intercept
    //
//      DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = MKJoy_DispatchPassThrough;
    DriverObject->MajorFunction [IRP_MJ_PNP] =          MKJoy_PnP;
    DriverObject->MajorFunction [IRP_MJ_POWER] =        MKJoy_Power;
    DriverObject->DriverExtension->AddDevice = MKJoy_AddDevice;

        RtlZeroMemory(&reg, sizeof(reg));
        reg.Revision = HID_REVISION;
        reg.DriverObject = DriverObject;
        reg.RegistryPath = RegistryPath;
        reg.DeviceExtensionSize = 0; //sizeof(DEVICE_EXTENSION) + GetSizeofGenericExtension();
        reg.DevicesArePolled = FALSE;

        return HidRegisterMinidriver(&reg);
}

NTSTATUS
MKJoy_AddDevice(
    IN PDRIVER_OBJECT   Driver,
    IN PDEVICE_OBJECT   PDO
    )
{
    PAGED_CODE();

    return STATUS_SUCCESS;
}

NTSTATUS
MKJoy_Complete(
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp,
    IN PVOID            Context
    )
/*++
Routine Description:

    Generic completion routine that allows the driver to send the irp down the
    stack, catch it on the way up, and do more processing at the original IRQL.
   
--*/

{
    PKEVENT             event;

    event = (PKEVENT) Context;

    //
    // We could switch on the major and minor functions of the IRP to perform
    // different functions, but we know that Context is an event that needs
    // to be set.
    //
    KeSetEvent(event, 0, FALSE);

    //
    // Allows the caller to use the IRP after it is completed
    //
    return STATUS_MORE_PROCESSING_REQUIRED;
}

NTSTATUS
MKJoy_DispatchPassThrough(
        IN PDEVICE_OBJECT DeviceObject,
        IN PIRP Irp
        )
/*++
Routine Description:

    Passes a request on to the lower driver.
     
Considerations:
     
    If you are creating another device object (to communicate with user mode
    via IOCTLs), then this function must act differently based on the intended
    device object.  If the IRP is being sent to the solitary device object, then
    this function should just complete the IRP (becuase there is no more stack
    locations below it).  If the IRP is being sent to the PnP built stack, then
    the IRP should be passed down the stack.
   
    These changes must also be propagated to all the other IRP_MJ dispatch
    functions (such as create, close, cleanup, etc.) as well!

--*/

{
    PIO_STACK_LOCATION irpStack = IoGetCurrentIrpStackLocation(Irp);

    //
    // Pass the IRP to the target
    //
    IoSkipCurrentIrpStackLocation(Irp);
    return IoCallDriver(GET_NEXT_DEVICE_OBJECT(DeviceObject), Irp);
}          
NTSTATUS
MKJoy_PnP(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
/*++

Routine Description:

    This routine is the dispatch routine for plug and play irps

Arguments:

    DeviceObject - Pointer to the device object.

    Irp - Pointer to the request packet.

Return Value:

    Status is returned.

--*/

{
    PHID_DEVICE_EXTENSION           devExt;
    PIO_STACK_LOCATION          irpStack;
    NTSTATUS                    status = STATUS_SUCCESS;
    KIRQL                       oldIrql;
    KEVENT                      event;        

    PAGED_CODE();

    devExt = (PHID_DEVICE_EXTENSION) DeviceObject->DeviceExtension;
    irpStack = IoGetCurrentIrpStackLocation(Irp);

    switch (irpStack->MinorFunction) {
    case IRP_MN_START_DEVICE: {

        //
        // The device is starting.
        //
        // We cannot touch the device (send it any non pnp irps) until a
        // start device has been passed down to the lower drivers.
        //
        IoCopyCurrentIrpStackLocationToNext(Irp);
        KeInitializeEvent(&event,
                          NotificationEvent,
                          FALSE
                          );

        IoSetCompletionRoutine(Irp,
                               (PIO_COMPLETION_ROUTINE) MKJoy_Complete,
                               &event,
                               TRUE,
                               TRUE,
                               TRUE); // No need for Cancel

        status = IoCallDriver(devExt->NextDeviceObject, Irp);

        if (STATUS_PENDING == status) {
            KeWaitForSingleObject(
               &event,
               Executive, // Waiting for reason of a driver
               KernelMode, // Waiting in kernel mode
               FALSE, // No allert
               NULL); // No timeout
        }
        Irp->IoStatus.Status = status;
        Irp->IoStatus.Information = 0;
        IoCompleteRequest(Irp, IO_NO_INCREMENT);

        break;
    }
    default:
        //
        // Here the filter driver might modify the behavior of these IRPS
        // Please see PlugPlay documentation for use of these IRPs.
        //
        IoSkipCurrentIrpStackLocation(Irp);
        status = IoCallDriver(devExt->NextDeviceObject, Irp);
        break;
    }

    return status;
}

NTSTATUS
MKJoy_Power(
    IN PDEVICE_OBJECT    DeviceObject,
    IN PIRP              Irp
    )
/*++

Routine Description:

    This routine is the dispatch routine for power irps   Does nothing except
    record the state of the device.

Arguments:

    DeviceObject - Pointer to the device object.

    Irp - Pointer to the request packet.

Return Value:

    Status is returned.

--*/

{
    PHID_DEVICE_EXTENSION   devExt;

    PAGED_CODE();

    devExt = (PHID_DEVICE_EXTENSION) DeviceObject->DeviceExtension;
    PoStartNextPowerIrp(Irp);
    IoSkipCurrentIrpStackLocation(Irp);
    return PoCallDriver(devExt->NextDeviceObject, Irp);
}      
Подскажите, пожалуйста, почему происходит этот бсод
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 16-10-2018 07:36 » 

например, массив DriverObject->MajorFunction[] не заполнен
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Ллирик
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 16-10-2018 12:58 » 

например, массив DriverObject->MajorFunction[] не заполнен
Но ведь и в hidgame и в hidFake и в PPortJoy отсутствует полное заполнение массива DriverObject->MajorFunction[]
Записан
Ллирик
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 16-10-2018 14:07 » 

А если установить hidgame, то Диспетчер устройств пишет "запуск этого устройства невозможен функция не поддерживается"
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 16-10-2018 14:28 » 

да, погорячился... вроде не обязательно. блин документация нормальная исчезла куда то)

DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING; //
в  AddDevice    не обязательно снимать?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Ллирик
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 16-10-2018 16:19 » 

DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING; //
в  AddDevice    не обязательно снимать?
Да, простите, забыл, но теперь STATUS_ACCESS_VIOLATION в файле WdFilter.sys (файл майкрософт)
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 16-10-2018 20:01 » 

там при ошибках раньше автоматом дамп ядра писался куда то. откройте его в windbg- посмотрите в стеке, может видно место будет? а то по коду я что то не соображу.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Ллирик
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 16-10-2018 20:53 » 

Раньше и в мини-дампах писался стек. я их смотрю в BlueScreenView. а теперь почему-то не пишется(  а с полными дампами пока не работал..... попробую.........

Добавлено через 19 часов, 39 минут и 1 секунду:
А если установить hidgame, то Диспетчер устройств пишет "запуск этого устройства невозможен функция не поддерживается"
Подскажите, пожалуйста, что должно сделать PDO для запуска HID-устройства?
« Последнее редактирование: 17-10-2018 16:32 от Ллирик » Записан
Ллирик
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 22-10-2018 00:03 » 

Если  не использовать HidRegisterMinidriver, то есть использовать не Hid, а обычный драйвер, устройство запускается нормально. Вот я и спрашиваю
Цитата
Подскажите, пожалуйста, что должно сделать PDO для запуска HID-устройства?
Например, что сделает USB-драйвер для запуска HID-устройства?
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 23-10-2018 19:52 » 

HidRegisterMinidriver завершается успешно?
ну вот например пример
https://github.com/Microsoft/Windows-driver-samples/blob/master/hid/hidusbfx2/hidkmdf/hidkmdf.c
« Последнее редактирование: 23-10-2018 20:00 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Ллирик
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 25-10-2018 20:43 » 

HidRegisterMinidriver завершается успешно?
ну вот например пример
https://github.com/Microsoft/Windows-driver-samples/blob/master/hid/hidusbfx2/hidkmdf/hidkmdf.c
Благодарю за пример! Бсодило из-за отсутствия функции DriverObject->DriverUnload Скромно так... Теперь осталась только вторая проблема. что должно сделать PDO, драйвер которого не может быть драйвером HID, для запуска HID-устройства?
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 26-10-2018 20:11 » 

посмотрите примеры в ddk, там вроде есть раздел hid)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Ллирик
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 26-10-2018 20:31 » new

Так у меня не совсем обычный драйвер) а в PPJoyBus много лишнего и пока непонятно, что именно мне нужно. Буду копаться в нём дальше....
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines