Как правильно создать вторую символьную ссылку (девайс)?

Тема в разделе "WASM.NT.KERNEL", создана пользователем Vetroboy, 8 янв 2010.

  1. Vetroboy

    Vetroboy New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2010
    Сообщения:
    3
    Делаю фильтр-драйвер мыши.
    Для доступа из UserMode хочу создать вторую символьную ссылку (девайс).
    Ссылка создается (в devicetree появляется), но при попытке CreateFile из UserMode - синий экран.

    Как сделать правильно?


    Вот мой код.
    Код (Text):
    1. NTSTATUS DriverEntry ( IN  PDRIVER_OBJECT  DriverObject, IN  PUNICODE_STRING RegistryPath  )
    2. {
    3.     ULONG i;
    4.  
    5.     UNREFERENCED_PARAMETER (RegistryPath);
    6.  
    7.     DbgPrint(("MouFilter_DriverEntry() called\n"));
    8.  
    9.     for (i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++)
    10.     {
    11.         DriverObject->MajorFunction = MouFilter_DispatchPassThrough;
    12.     }
    13.  
    14.     DriverObject->MajorFunction [IRP_MJ_CREATE] =    MouFilter_CreateClose;
    15.     DriverObject->MajorFunction [IRP_MJ_CLOSE] =        MouFilter_CreateClose;
    16.     DriverObject->MajorFunction [IRP_MJ_PNP] =          MouFilter_PnP;
    17.     DriverObject->MajorFunction [IRP_MJ_POWER] =        MouFilter_Power;
    18.     DriverObject->MajorFunction [IRP_MJ_INTERNAL_DEVICE_CONTROL] = MouFilter_InternIoCtl;
    19.  
    20.     DriverObject->DriverUnload = MouFilter_Unload;
    21.     DriverObject->DriverExtension->AddDevice = MouFilter_AddDevice;
    22.  
    23.     return STATUS_SUCCESS;
    24. }
    25.  
    26. NTSTATUS MouFilter_AddDevice( IN PDRIVER_OBJECT   Driver, IN PDEVICE_OBJECT   PDO )
    27. {
    28.     PCWSTR   dDeviceName2 = L"\\Device\\hideproc55";    //имя устройсва
    29.     PCWSTR   dSymbolicLinkName2 = L"\\DosDevices\\hideproc55"; //имя устройсва дос
    30.  
    31.  
    32.     PDEVICE_EXTENSION        devExt2;
    33.     PDEVICE_EXTENSION        devExt;
    34.     IO_ERROR_LOG_PACKET      errorLogEntry;
    35.     PDEVICE_OBJECT           device;
    36.     PDEVICE_OBJECT           device2;
    37.     NTSTATUS                 status = STATUS_SUCCESS;
    38.     NTSTATUS                 status2 = STATUS_SUCCESS;
    39.     PCWSTR   dDeviceName = L"\\Device\\hideproc5";    //имя устройсва
    40.     PCWSTR   dSymbolicLinkName = L"\\DosDevices\\hideproc5"; //имя устройсва дос
    41.     RtlInitUnicodeString(&DeviceName, dDeviceName);
    42.     RtlInitUnicodeString(&SymbolicLinkName, dSymbolicLinkName);
    43.  
    44.  
    45.     PAGED_CODE();
    46.  
    47.    DbgPrint(("MouFilter_AddDevice() called\n"));
    48.  
    49.  
    50.     status = IoCreateDevice(Driver,                  
    51.                             sizeof(DEVICE_EXTENSION),
    52.                             &DeviceName,                    
    53.                             FILE_DEVICE_MOUSE,    
    54.                             0,                  
    55.                             FALSE,              
    56.                             &device            
    57.                             );
    58.  
    59.     if (!NT_SUCCESS(status)) {
    60.         return (status);
    61.     }
    62.     RtlZeroMemory(device->DeviceExtension, sizeof(DEVICE_EXTENSION));
    63.     IoCreateSymbolicLink(&SymbolicLinkName, &DeviceName);
    64.  
    65.  
    66.  
    67.     devExt = (PDEVICE_EXTENSION) device->DeviceExtension;
    68.     devExt->TopOfStack = IoAttachDeviceToDeviceStack(device, PDO);
    69.  
    70.     ASSERT(devExt->TopOfStack);
    71.  
    72.     devExt->Self =          device;
    73.     devExt->PDO =           PDO;
    74.     devExt->DeviceState =   PowerDeviceD0;
    75.  
    76.     devExt->SurpriseRemoved = FALSE;
    77.     devExt->Removed =         FALSE;
    78.     devExt->Started =         FALSE;
    79.  
    80.     //DO_BUFFERED_IO
    81.     device->Flags |= (DO_BUFFERED_IO | DO_POWER_PAGABLE);
    82.     device->Flags &= ~DO_DEVICE_INITIALIZING;
    83.  
    84. ///////////////////////////////////////////////////////////////
    85.  
    86.     RtlInitUnicodeString(&DeviceName2, dDeviceName2);
    87.     RtlInitUnicodeString(&SymbolicLinkName2, dSymbolicLinkName2);
    88.  
    89.  
    90.     status2 = IoCreateDevice( device->DriverObject,                  
    91.                             sizeof(DEVICE_EXTENSION2),
    92.                             &DeviceName2,                    
    93.                             FILE_DEVICE_MOUSE,    
    94.                             0,                  
    95.                             FALSE,              
    96.                             &device2            
    97.                             );
    98.  
    99.     if (!NT_SUCCESS(status2))
    100.     {
    101.    DbgPrint(("Device2 init failure!\n"));
    102.  
    103.         return (status2);
    104.     }
    105.     else
    106.     {
    107.    DbgPrint(("Device2 init Ok!\n"));
    108.     };
    109.     RtlZeroMemory(device2->DeviceExtension, sizeof(DEVICE_EXTENSION2));
    110.  
    111.     devExt2 = (PDEVICE_EXTENSION) device2->DeviceExtension;
    112.  
    113.     devExt2->Self =          device2;
    114.     devExt2->PDO =           PDO;
    115.     devExt2->DeviceState =   PowerDeviceD0;
    116.  
    117.     devExt2->SurpriseRemoved = FALSE;
    118.     devExt2->Removed =         FALSE;
    119.     devExt2->Started =         FALSE;
    120.  
    121.     device2->Flags |= (DO_BUFFERED_IO | DO_POWER_PAGABLE);
    122.     device2->Flags &= ~DO_DEVICE_INITIALIZING;
    123.  
    124.     IoCreateSymbolicLink(&SymbolicLinkName2, &DeviceName2);
    125.  
    126. ///////////////////////////////////////////////////////////////
    127.     return status;
    128. }
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Хотя бы код багчека, а лучше !analyze -v в студию.
     
  3. Vetroboy

    Vetroboy New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2010
    Сообщения:
    3
    Сори. Вот.
    Код (Text):
    1. !analyze -v
    2. *******************************************************************************
    3. *                                                                             *
    4. *                        Bugcheck Analysis                                    *
    5. *                                                                             *
    6. *******************************************************************************
    7.  
    8. DRIVER_PORTION_MUST_BE_NONPAGED (d3)
    9. When possible, the guilty driver's name (Unicode string) is printed on
    10. the bugcheck screen and saved in KiBugCheckDriver.
    11. An attempt was made to access a pageable (or completely invalid) address at an
    12. interrupt request level (IRQL) that is too high.  This is usually
    13. caused by drivers marking code or data as pageable when it should be
    14. marked nonpaged.
    15. If kernel debugger is available get stack backtrace.
    16. Arguments:
    17. Arg1: bf849b03, memory referenced
    18. Arg2: 000000ff, IRQL
    19. Arg3: 00000000, value 0 = read operation, 1 = write operation
    20. Arg4: 805062a9, address which referenced memory
    21.  
    22. Debugging Details:
    23. ------------------
    24.  
    25. ***** Kernel symbols are WRONG. Please fix symbols to do analysis.
    26.  
    27. *************************************************************************
    28. ***                                                                   ***
    29. ***                                                                   ***
    30. ***    Your debugger is not using the correct symbols                 ***
    31. ***                                                                   ***
    32. ***    In order for this command to work properly, your symbol path   ***
    33. ***    must point to .pdb files that have full type information.      ***
    34. ***                                                                   ***
    35. ***    Certain .pdb files (such as the public OS symbols) do not      ***
    36. ***    contain the required information.  Contact the group that      ***
    37. ***    provided you with these symbols if you need this command to    ***
    38. ***    work.                                                          ***
    39. ***                                                                   ***
    40. ***    Type referenced: nt!_KPRCB                                     ***
    41. ***                                                                   ***
    42. *************************************************************************
    43. *************************************************************************
    44. ***                                                                   ***
    45. ***                                                                   ***
    46. ***    Your debugger is not using the correct symbols                 ***
    47. ***                                                                   ***
    48. ***    In order for this command to work properly, your symbol path   ***
    49. ***    must point to .pdb files that have full type information.      ***
    50. ***                                                                   ***
    51. ***    Certain .pdb files (such as the public OS symbols) do not      ***
    52. ***    contain the required information.  Contact the group that      ***
    53. ***    provided you with these symbols if you need this command to    ***
    54. ***    work.                                                          ***
    55. ***                                                                   ***
    56. ***    Type referenced: nt!KPRCB                                      ***
    57. ***                                                                   ***
    58. *************************************************************************
    59. *************************************************************************
    60. ***                                                                   ***
    61. ***                                                                   ***
    62. ***    Your debugger is not using the correct symbols                 ***
    63. ***                                                                   ***
    64. ***    In order for this command to work properly, your symbol path   ***
    65. ***    must point to .pdb files that have full type information.      ***
    66. ***                                                                   ***
    67. ***    Certain .pdb files (such as the public OS symbols) do not      ***
    68. ***    contain the required information.  Contact the group that      ***
    69. ***    provided you with these symbols if you need this command to    ***
    70. ***    work.                                                          ***
    71. ***                                                                   ***
    72. ***    Type referenced: nt!_KPRCB                                     ***
    73. ***                                                                   ***
    74. *************************************************************************
    75. *************************************************************************
    76. ***                                                                   ***
    77. ***                                                                   ***
    78. ***    Your debugger is not using the correct symbols                 ***
    79. ***                                                                   ***
    80. ***    In order for this command to work properly, your symbol path   ***
    81. ***    must point to .pdb files that have full type information.      ***
    82. ***                                                                   ***
    83. ***    Certain .pdb files (such as the public OS symbols) do not      ***
    84. ***    contain the required information.  Contact the group that      ***
    85. ***    provided you with these symbols if you need this command to    ***
    86. ***    work.                                                          ***
    87. ***                                                                   ***
    88. ***    Type referenced: nt!KPRCB                                      ***
    89. ***                                                                   ***
    90. *************************************************************************
    91. *************************************************************************
    92. ***                                                                   ***
    93. ***                                                                   ***
    94. ***    Your debugger is not using the correct symbols                 ***
    95. ***                                                                   ***
    96. ***    In order for this command to work properly, your symbol path   ***
    97. ***    must point to .pdb files that have full type information.      ***
    98. ***                                                                   ***
    99. ***    Certain .pdb files (such as the public OS symbols) do not      ***
    100. ***    contain the required information.  Contact the group that      ***
    101. ***    provided you with these symbols if you need this command to    ***
    102. ***    work.                                                          ***
    103. ***                                                                   ***
    104. ***    Type referenced: nt!_KPRCB                                     ***
    105. ***                                                                   ***
    106. *************************************************************************
    107. *************************************************************************
    108. ***                                                                   ***
    109. ***                                                                   ***
    110. ***    Your debugger is not using the correct symbols                 ***
    111. ***                                                                   ***
    112. ***    In order for this command to work properly, your symbol path   ***
    113. ***    must point to .pdb files that have full type information.      ***
    114. ***                                                                   ***
    115. ***    Certain .pdb files (such as the public OS symbols) do not      ***
    116. ***    contain the required information.  Contact the group that      ***
    117. ***    provided you with these symbols if you need this command to    ***
    118. ***    work.                                                          ***
    119. ***                                                                   ***
    120. ***    Type referenced: nt!_KPRCB                                     ***
    121. ***                                                                   ***
    122. *************************************************************************
    123. *************************************************************************
    124. ***                                                                   ***
    125. ***                                                                   ***
    126. ***    Your debugger is not using the correct symbols                 ***
    127. ***                                                                   ***
    128. ***    In order for this command to work properly, your symbol path   ***
    129. ***    must point to .pdb files that have full type information.      ***
    130. ***                                                                   ***
    131. ***    Certain .pdb files (such as the public OS symbols) do not      ***
    132. ***    contain the required information.  Contact the group that      ***
    133. ***    provided you with these symbols if you need this command to    ***
    134. ***    work.                                                          ***
    135. ***                                                                   ***
    136. ***    Type referenced: nt!_KPRCB                                     ***
    137. ***                                                                   ***
    138. *************************************************************************
    139. *********************************************************************
    140. * Symbols can not be loaded because symbol path is not initialized. *
    141. *                                                                   *
    142. * The Symbol Path can be set by:                                    *
    143. *   using the _NT_SYMBOL_PATH environment variable.                 *
    144. *   using the -y <symbol_path> argument when starting the debugger. *
    145. *   using .sympath and .sympath+                                    *
    146. *********************************************************************
    147. *********************************************************************
    148. * Symbols can not be loaded because symbol path is not initialized. *
    149. *                                                                   *
    150. * The Symbol Path can be set by:                                    *
    151. *   using the _NT_SYMBOL_PATH environment variable.                 *
    152. *   using the -y <symbol_path> argument when starting the debugger. *
    153. *   using .sympath and .sympath+                                    *
    154. *********************************************************************
    155.  
    156. ADDITIONAL_DEBUG_TEXT:  
    157. Use '!findthebuild' command to search for the target build information.
    158. If the build information is available, run '!findthebuild -s ; .reload' to set symbol path and load symbols.
    159.  
    160. FAULTING_MODULE: 804d7000 nt
    161.  
    162. DEBUG_FLR_IMAGE_TIMESTAMP:  478479cf
    163.  
    164. READ_ADDRESS:  bf849b03
    165.  
    166. CURRENT_IRQL:  ff
    167.  
    168. FAULTING_IP:
    169. nt+2f2a9
    170. 805062a9 8a11            mov     dl,byte ptr [ecx]
    171.  
    172. CUSTOMER_CRASH_COUNT:  2
    173.  
    174. DEFAULT_BUCKET_ID:  DRIVER_FAULT
    175.  
    176. BUGCHECK_STR:  0xD3
    177.  
    178. LAST_CONTROL_TRANSFER:  from b217323d to 805062a9
    179.  
    180. STACK_TEXT:  
    181. WARNING: Stack unwind information not available. Following frames may be wrong.
    182. b275aac8 b217323d 81d97290 00000000 00000000 nt+0x2f2a9
    183. b275aaf0 b2189071 bf849b03 b2178760 b2178140 dump_wmimmc+0x323d
    184. b275ab28 b219aa2d 81d9e720 81f42f38 820013a8 dump_wmimmc+0x19071
    185. b275abec b2176711 81dfdf90 00000001 821018e8 dump_wmimmc+0x2aa2d
    186. b275ac34 804eddf9 81c2dad0 820013a8 806d02d0 dump_wmimmc+0x6711
    187. b275ac58 805749d1 81c2dad0 820013a8 81dfdf90 nt+0x16df9
    188. b275ad00 8056d33c 000001fc 00000000 00000000 nt+0x9d9d1
    189. b275ad34 8053c808 000001fc 00000000 00000000 nt+0x9633c
    190. b275ad64 00413893 badb0d00 0012f1c0 b250ed98 nt+0x65808
    191. b275ad68 badb0d00 0012f1c0 b250ed98 b250edcc 0x413893
    192. b275ad6c 0012f1c0 b250ed98 b250edcc 00000000 0xbadb0d00
    193. b275ad70 b250ed98 b250edcc 00000000 00000000 0x12f1c0
    194. b275ad74 b250edcc 00000000 00000000 00000000 0xb250ed98
    195. b275ad78 00000000 00000000 00000000 00000000 0xb250edcc
    196.  
    197.  
    198. STACK_COMMAND:  kb
    199.  
    200. FOLLOWUP_IP:
    201. dump_wmimmc+323d
    202. b217323d ??              ???
    203.  
    204. SYMBOL_STACK_INDEX:  1
    205.  
    206. SYMBOL_NAME:  dump_wmimmc+323d
    207.  
    208. FOLLOWUP_NAME:  MachineOwner
    209.  
    210. MODULE_NAME: dump_wmimmc
    211.  
    212. IMAGE_NAME:  dump_wmimmc.sys
    213.  
    214. BUCKET_ID:  WRONG_SYMBOLS
    215.  
    216. Followup: MachineOwner
    217. ---------
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Ну елки.
    1) юзай [ code ] тег для листингов
    2) заюзай символы. ничего не понятно
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Vetroboy
    Почитайте про драйверы фильтры, когда он создается для существующего устройства. Вам надо после того как вы создали в стеке PnP объект FiDO, дополнить его объктом EDO. И обращаться из приложения к EDO. Другие пути недопустимы. Либо не являются корректными.
    Вы судя по всему неправильно создаете Extension. Я не вижу у вас установку флага FIDO_EXTENSION.
    Ну и у Walter Oney почитайте главу 16. Там все подробно расписано с примером кода.

    Хотя конечно, символы в крешдампе не помешали бы.
     
  6. Vetroboy

    Vetroboy New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2010
    Сообщения:
    3
    спасибо!