Re[3]: проблема с WDF драйвером Raid контроллера
От: eagersh  
Дата: 05.04.11 17:09
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, pva, Вы писали:


pva>>Использовать поиск и найти как включить отладочный вывод.


А>в каждой функции на каждом важном этапе у меня прописан DebugPrint.

А>вот пример:
А>DebugPrint((_TRACE_ENTRY, "%s Begin.\n", szFnName));

А>спец прогой их отлавливаю, но ничего не ловится.


А>поиск по данному запросу ничего нового мне не подсказал. не затруднитесь объяснить пожалуйста. =*

А ты включил вывод debug messages? По умолчанию начиная с Vista такие сообщения отключенны.
Re[9]: проблема с WDF драйвером Raid контроллера
От: smithana  
Дата: 15.04.11 10:27
Оценка: :)
ну я дураак))
оказывается всё очень просто
как у меня записан самый первый параметр в DriverEntry:
IN PDRIVER_OBJECT *DriverObject,
естественно он указателю место не найдёт =D
убрал указатель всё сразу быстренько встало)
огромное спасибо)
проблема с WDF драйвером Raid контроллера
От: smithana  
Дата: 04.04.11 13:19
Оценка:
это мой первый драйвер, так что буду рад любым комментариям. Ошибка может быть в какойто глупости.

значит написал драйвер. Хочу его поставить. Сначала выдавал ошибку — Возможно драйвер повреждён или отсутствует (код 39)
т.к. ставлю удалённо с хр на сервер 2003 то проверил наличие wdfldr.sys только на хр. на сервере не оказалось. подсунул на сервер с хр.
теперь такую ошибку выдаёт:
код 03. драйвер повреждён или нехватает памяти для загрузки.
в setupapi пишет вот так:
#I163 Устройство не запущено: обнаружена проблема: 0x03: CM_PROB_OUT_OF_MEMORY.

драйвер выделяет буфер памяти в 256 мб. но я так понимаю до него дело не доходит, т.к. даже дебаг принты из драйверЕнтери не выводит.
подскажите пожалуйста, в чём может быть проблема?
Re: проблема с WDF драйвером Raid контроллера
От: pva  
Дата: 04.04.11 14:21
Оценка:
Здравствуйте, smithana, Вы писали:

S>драйвер выделяет буфер памяти в 256 мб. но я так понимаю до него дело не доходит, т.к. даже дебаг принты из драйверЕнтери не выводит.

S>подскажите пожалуйста, в чём может быть проблема?
Использовать поиск и найти как включить отладочный вывод.
newbie
Re[2]: проблема с WDF драйвером Raid контроллера
От: Аноним  
Дата: 04.04.11 20:15
Оценка:
Здравствуйте, pva, Вы писали:

pva>Использовать поиск и найти как включить отладочный вывод.


в каждой функции на каждом важном этапе у меня прописан DebugPrint.
вот пример:
DebugPrint((_TRACE_ENTRY, "%s Begin.\n", szFnName));

спец прогой их отлавливаю, но ничего не ловится. следовательно до них дело не доходит, ведь так?
и так же смотрю сообщения системы в setupapi файле.

поиск по данному запросу ничего нового мне не подсказал. не затруднитесь объяснить пожалуйста. =*
Re[4]: проблема с WDF драйвером Raid контроллера
От: smithana  
Дата: 05.04.11 18:22
Оценка:
Здравствуйте, eagersh,
Да конечно.
проверяю на старом рабочем драйвере, всё выводит.
этот молчит как партизан.

так как я только начинаю, думаю дело в чём то очень простом.
так что буду рад любым вариантом, проверю всё что только скажите.
Re[5]: проблема с WDF драйвером Raid контроллера
От: Геннадий Майко США  
Дата: 05.04.11 22:24
Оценка:
Здравствуйте, smithana,

S>так как я только начинаю, думаю дело в чём то очень простом.

S>так что буду рад любым вариантом, проверю всё что только скажите.
--
Включите и посмотрите setupapi.log (см. здесь) и, для WDF, setupact.log (см. здесь)

C уважением,
Геннадий Майко.
Re: проблема с WDF драйвером Raid контроллера
От: dimb82  
Дата: 06.04.11 02:55
Оценка:
А как вы устанавливаете драйвер? Через .INF файл?

S>драйвер выделяет буфер памяти в 256 мб. но я так понимаю до него дело не доходит, т.к. даже дебаг принты из драйверЕнтери не выводит.

S>подскажите пожалуйста, в чём может быть проблема?
Re[2]: проблема с WDF драйвером Raid контроллера
От: smithana  
Дата: 08.04.11 20:19
Оценка:
Здравствуйте, dimb82, Вы писали:

D>А как вы устанавливаете драйвер? Через .INF файл?


да через него. сегодня воткнули железку на другой комп, на котором обычный хр стоит. при установке сразу же ругнулся что не хватает wdfldr.sys (с сервером мучался долго, пока не понял что его не хватало). когда подпихнули ему и повторили попытку выдал синий экран. потом просмотрев файл ошибки, поняли что проблема уже в driver.sys.
Re[3]: проблема с WDF драйвером Raid контроллера
От: dimb82  
Дата: 09.04.11 04:01
Оценка:
А CoInstaller для WDF у вас прописан в .INF файле?

D>>А как вы устанавливаете драйвер? Через .INF файл?


S>да через него. сегодня воткнули железку на другой комп, на котором обычный хр стоит. при установке сразу же ругнулся что не хватает wdfldr.sys (с сервером мучался долго, пока не понял что его не хватало). когда подпихнули ему и повторили попытку выдал синий экран. потом просмотрев файл ошибки, поняли что проблема уже в driver.sys.
Re[4]: проблема с WDF драйвером Raid контроллера
От: smithana  
Дата: 09.04.11 17:50
Оценка:
Здравствуйте, dimb82, Вы писали:

D>А CoInstaller для WDF у вас прописан в .INF файле?


да конечно последний 1009 версии.

[CoInstaller_CopyFiles]
wdfcoinstaller01009.dll

[SourceDisksFiles]
wdfcoinstaller01009.dll=1 ; make sure the number matches with SourceDisksNames
Re[5]: проблема с WDF драйвером Raid контроллера
От: dimb82  
Дата: 09.04.11 18:03
Оценка:
У меня в .INF файле есть ещё такие строки:

;
;--- XXX_Device Coinstaller installation ------
;
[DestinationDirs]
XXX_Device_CoInstaller_CopyFiles = 11

[XXX_Device.NT.CoInstallers]
AddReg=XXX_Device_CoInstaller_AddReg
CopyFiles=XXX_Device_CoInstaller_CopyFiles

[XXX_Device_CoInstaller_AddReg]
HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01009.dll,WdfCoInstaller"

[XXX_Device_CoInstaller_CopyFiles]
WdfCoInstaller01009.dll

[SourceDisksFiles]
WdfCoInstaller01009.dll=1 ; make sure the number matches with SourceDisksNames

[XXX_Device.NT.Wdf]
KmdfService = xxx, xxx_wdfsect

[xxx_wdfsect]
KmdfLibraryVersion = 1.9


Может в них дело?

S>да конечно последний 1009 версии.


S>[CoInstaller_CopyFiles]

S>wdfcoinstaller01009.dll

S>[SourceDisksFiles]

S>wdfcoinstaller01009.dll=1 ; make sure the number matches with SourceDisksNames
Re[6]: проблема с WDF драйвером Raid контроллера
От: smithana  
Дата: 10.04.11 12:02
Оценка:
Здравствуйте, dimb82, Вы писали:

D>У меня в .INF файле есть ещё такие строки:

D>Может в них дело?

в понедельник опробую и отпишусь, спасибо большое)
Re[7]: проблема с WDF драйвером Raid контроллера
От: smithana  
Дата: 12.04.11 15:08
Оценка:
убрал выделение массива в 256 мб, и добавил строки по поводу коинсталлера в инф файл.
никаких изменений нет, по прежнему код 3 и в setupapi пишет:
#I163 Устройство не запущено: обнаружена проблема: 0x03: CM_PROB_OUT_OF_MEMORY.
Re[8]: проблема с WDF драйвером Raid контроллера
От: smithana  
Дата: 13.04.11 19:44
Оценка:
Сегодня целый день трахался, нихрена(
на сервере 03, переставили железку(рейд контроллер) в другой слот. отключил полностью AddDevice, т.е. он остался просто как заглушка. Поставил на сервер, сказал что установил и попросил перезагрузку хоть в инф файле её и не прописывал. После перезагрузки выдал bsod с замечательной строчкой: виновник — wdf01000.sys
он был 2006 года, подпихнул вместо него с ХР 2009, размером отличались, переустановил, опять bsod и он же виновник. убрал уже из DriverEntry DebugPrint, т.е. тупо остался DriverEntry и заглушка AddDevice. и всё равно bsod с кодом — 000007Е. (кол-во нулей не помню). что говорит о том что опять проблемы с памятью. На ХР поставить не удалось пока.
вот DriverEntry и AddDevice:

#include "includes.h"

#ifdef ALLOC_PRAGMA
#pragma alloc_text(INIT, DriverEntry)
#pragma alloc_text(PAGE, SataRaidAddDevice)
#endif

NTSTATUS DriverEntry(IN PDRIVER_OBJECT *DriverObject,  
                     IN PUNICODE_STRING RegistryPath){

    WDF_DRIVER_CONFIG config;

    KdPrint(("Windows Sata Raid Controller Driver.\n"));
    KdPrint(("Built %s %s\n", __DATE__, __TIME__));

    WDF_DRIVER_CONFIG_INIT(&config, SataRaidAddDevice);
    return WdfDriverCreate(*DriverObject, RegistryPath, WDF_NO_OBJECT_ATTRIBUTES, &config, WDF_NO_HANDLE);
}

NTSTATUS SataRaidAddDevice(IN WDFDRIVER Driver,
                           IN PWDFDEVICE_INIT DeviceInit){
  DECLARE_CONST_UNICODE_STRING(ntDeviceName, NT_DEVICE_NAME);
  WDF_OBJECT_ATTRIBUTES           queueAttributes;      //Аттрибуты очереди 
  WDF_OBJECT_ATTRIBUTES           deviceAttributes;     //Аттрибуты устройства
  WDF_PNPPOWER_EVENT_CALLBACKS    pnpPowerCallbacks;    //Обработчики вызовов энергопотребления 
  PDEVICE_EXTENSION               pDE;                  //Личные параметры ус-ва. См. .h
  WDFDEVICE                       device;               //Часть параметров ус-ва
  WDFMEMORY                       memory;
  WDF_IO_QUEUE_CONFIG             ioQueueConfig;        //Часть параметров оч-ди
  WDFQUEUE                        queue;                //Часть параметров оч-ди
  NTSTATUS                        status;               //проверка
  PQUEUE_EXTENSION                pQueueContext = NULL; //Личные параметры оч-ди
  PHYSICAL_ADDRESS                nPhysAddr;            //Физический Адрес
  void                            *pDataBuf;            //Буфер
  UINT32                          nAllocSize;           //Размер буфера
  LARGE_INTEGER                   nLowAddr,             //Минимальный адрес буфера
                                  nMaxAddr,             //Максимальный адрес буфера
                                  nDataAlign;           //Выравнивание адреса буфера
  UINT32                          *pBusSlotData;
  size_t                          bufferLength;


  PAGED_CODE();

  UNREFERENCED_PARAMETER(Driver);

/*  status = WdfDeviceInitAssignName(DeviceInit, &ntDeviceName); 

  if (!NT_SUCCESS(status)){
      return status;
  }

  WdfDeviceInitSetDeviceType(DeviceInit, FILE_DEVICE_DISK);
  WdfDeviceInitSetIoType(DeviceInit, WdfDeviceIoDirect);
  WdfDeviceInitSetExclusive(DeviceInit, FALSE);

  WDF_PNPPOWER_EVENT_CALLBACKS_INIT(&pnpPowerCallbacks);

    //
    // These two callbacks set up and tear down hardware state,
    // specifically that which only has to be done once.
    //

  pnpPowerCallbacks.EvtDevicePrepareHardware = SataRaidPrepareHardware;
  pnpPowerCallbacks.EvtDeviceReleaseHardware = SataRaidReleaseHardware;

  WdfDeviceInitSetPnpPowerEventCallbacks(DeviceInit, &pnpPowerCallbacks);

  WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&deviceAttributes, DEVICE_EXTENSION);
 
  deviceAttributes.EvtCleanupCallback = SataRaidEvtDeviceContextCleanup;

  status = WdfDeviceCreate(&DeviceInit, &deviceAttributes, &device);
  if (!NT_SUCCESS(status)) {
      return status;
  }

  pDE = DeviceGetExtension(device);
  pDE->Device = device;

  WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE(&ioQueueConfig, WdfIoQueueDispatchSequential);

  ioQueueConfig.EvtIoDeviceControl = SataRaidDeviceDispatcher;
  ioQueueConfig.EvtIoRead          = SataRaidIoRead;
  ioQueueConfig.EvtIoWrite         = SataRaidIoWrite;

  WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&queueAttributes, QUEUE_EXTENSION);

  status = WdfIoQueueCreate(device, &ioQueueConfig, &queueAttributes, &queue );
  if (!NT_SUCCESS(status)) {
      return status;
  }

  // Context is the Queue handle
  pQueueContext = QueueGetExtension(queue);

  pQueueContext->DeviceExtension = pDE;

  //
  // Obtaining bus and slot number.
  //

  status = WdfDeviceAllocAndQueryProperty(device,
                                          DevicePropertyBusNumber,
                                          NonPagedPool,
                                          &deviceAttributes,
                                          &memory);
  if (!NT_SUCCESS(status)){
      return status;
  }
  pBusSlotData = WdfMemoryGetBuffer(memory, &bufferLength); 
  if (bufferLength < sizeof(UINT32)){
      return STATUS_INSUFFICIENT_RESOURCES;
  }
  pDE->m_nBusNumber = *pBusSlotData;
  WdfObjectDelete(memory);

  status = WdfDeviceAllocAndQueryProperty(device,
                                          DevicePropertyAddress,
                                          NonPagedPool,
                                          &deviceAttributes,
                                          &memory);
  if (!NT_SUCCESS(status)){
      return status;
  }
  pBusSlotData = WdfMemoryGetBuffer(memory, &bufferLength); 
  if (bufferLength < sizeof(UINT32)){
      return STATUS_INSUFFICIENT_RESOURCES;
  }
  pDE->m_nSlotNumber = *pBusSlotData;
  WdfObjectDelete(memory);

  //
  // Create a WDFINTERRUPT object.
  //
  status = SataRaidInterruptCreate(pDE);

  if (!NT_SUCCESS(status)){
      return status;
  }


  //
  // Initialize DMA.
  //
  nAllocSize = SATARAID_DMABUFFER_SIZE;
  nDataAlign.QuadPart = nAllocSize;
  nLowAddr.QuadPart = 0;
  nMaxAddr.QuadPart = 0xFFFFFFFFFFFFFFFF;

  pDataBuf = MmAllocateContiguousMemorySpecifyCache(nAllocSize,
                      nLowAddr, nMaxAddr, nDataAlign, MmCached);


  pDE->m_pDataBuf = pDataBuf;
  nPhysAddr = MmGetPhysicalAddress(pDataBuf);
  
  WriteBarDword(pDE, 0, 0x1000, nPhysAddr.LowPart);
  WriteBarDword(pDE, 0, 0x1004, nPhysAddr.HighPart);


  pDE->m_nChannel = 0;
  pDE->m_nTotalChannels = 1;
  return status;*/

  return STATUS_SUCCESS;

}


Что читать, где смотреть? Начальник уже зарплату отказывается выдавать(
Re[10]: проблема с WDF драйвером Raid контроллера
От: smithana  
Дата: 15.04.11 13:20
Оценка:

только с одним разобрался второе вылезло(

есть приложение, которое работает с железкой. на старом драйвере (неPnP) она видит железку, на новом не видит.
думал что Vendor и Device ID или имя железки в дереве реестра и в драйвере не совпадают.
оказалось что приложение к ID никакой привязки не имеет, а имя в дереве записывается, оно как раз с драйвера и берётся.

дерево просматривал в реестре — HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Enum там только Vendor, Device ID.
и WinObj просматривал в папке Device. там как раз появляется уст-во с имененем прописанным в драйвере:

#define NT_DEVICE_NAME L"\\Device\\sraid"
#define DOS_DEVICE_NAME L"\\DosDevices\\"

правда дос нэйм не нашёл.
Re[11]: проблема с WDF драйвером Raid контроллера
От: Imian  
Дата: 18.04.11 09:34
Оценка:
Здравствуйте, smithana, Вы писали:

S>дерево просматривал в реестре — HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Enum там только Vendor, Device ID.

S>и WinObj просматривал в папке Device. там как раз появляется уст-во с имененем прописанным в драйвере:

S>#define NT_DEVICE_NAME L"\\Device\\sraid"

S>#define DOS_DEVICE_NAME L"\\DosDevices\\"

S>правда дос нэйм не нашёл.

MS не рекомендует использование DOS-имён. я обхожусь интерфейсами устройства, а класс для поиска устройств с заданным GUID в user-mode имеется у Walter Oney.
Re[12]: проблема с WDF драйвером Raid контроллера
От: smithana  
Дата: 18.04.11 18:48
Оценка:
Здравствуйте, Imian, Вы писали:

I>MS не рекомендует использование DOS-имён. я обхожусь интерфейсами устройства, а класс для поиска устройств с заданным GUID в user-mode имеется у Walter Oney.


мало чего понял(
1. у меня драйвер не в юзер моде, а в режиме ядра.
2. Подскажите пожалуйста что на эту тему почитать или что вообще гуглить?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.