Создание статичной lib в Visual Studio

Тема в разделе "WASM.BEGINNERS", создана пользователем Llirik, 29 янв 2011.

  1. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    Сразу оговорюсь, языка С я не знаю, но у мне есть исходник на С и мне нужно из него вставить одну функцию в мой asm. И я подумал, может быть создать статичную lib, а потом прилинковать её к asm.....
    Код (Text):
    1. #include "kbfiltr.h"
    2.  
    3. NTSTATUS
    4.  
    5. KbFilter_PnP(
    6.     IN PDEVICE_OBJECT DeviceObject,
    7.     IN PIRP Irp
    8.     )
    9. /*++
    10.  
    11. Routine Description:
    12.  
    13.     This routine is the dispatch routine for plug and play irps
    14.  
    15. Arguments:
    16.  
    17.     DeviceObject - Pointer to the device object.
    18.  
    19.     Irp - Pointer to the request packet.
    20.  
    21. Return Value:
    22.  
    23.     Status is returned.
    24.  
    25. --*/
    26. {
    27.     PDEVICE_EXTENSION           devExt;
    28.     PIO_STACK_LOCATION          irpStack;
    29.     NTSTATUS                    status = STATUS_SUCCESS;
    30.     KIRQL                       oldIrql;
    31.     KEVENT                      event;        
    32.  
    33.     PAGED_CODE();
    34.  
    35.     devExt = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
    36.     irpStack = IoGetCurrentIrpStackLocation(Irp);
    37.  
    38.     switch (irpStack->MinorFunction) {
    39.     case IRP_MN_START_DEVICE: {
    40.  
    41.         //
    42.         // The device is starting.
    43.         //
    44.         // We cannot touch the device (send it any non pnp irps) until a
    45.         // start device has been passed down to the lower drivers.
    46.         //
    47.         IoCopyCurrentIrpStackLocationToNext(Irp);
    48.         KeInitializeEvent(&event,
    49.                           NotificationEvent,
    50.                           FALSE
    51.                           );
    52.  
    53.         IoSetCompletionRoutine(Irp,
    54.                                (PIO_COMPLETION_ROUTINE) KbFilter_Complete,
    55.                                &event,
    56.                                TRUE,
    57.                                TRUE,
    58.                                TRUE); // No need for Cancel
    59.  
    60.         status = IoCallDriver(devExt->TopOfStack, Irp);
    61.  
    62.         if (STATUS_PENDING == status) {
    63.             KeWaitForSingleObject(
    64.                &event,
    65.                Executive, // Waiting for reason of a driver
    66.                KernelMode, // Waiting in kernel mode
    67.                FALSE, // No allert
    68.                NULL); // No timeout
    69.         }
    70.  
    71.         if (NT_SUCCESS(status) && NT_SUCCESS(Irp->IoStatus.Status)) {
    72.             //
    73.             // As we are successfully now back from our start device
    74.             // we can do work.
    75.             //
    76.             devExt->Started = TRUE;
    77.             devExt->Removed = FALSE;
    78.             devExt->SurpriseRemoved = FALSE;
    79.         }
    80.  
    81.         //
    82.         // We must now complete the IRP, since we stopped it in the
    83.         // completetion routine with MORE_PROCESSING_REQUIRED.
    84.         //
    85.         Irp->IoStatus.Status = status;
    86.         Irp->IoStatus.Information = 0;
    87.         IoCompleteRequest(Irp, IO_NO_INCREMENT);
    88.  
    89.         break;
    90.     }
    91.  
    92.     case IRP_MN_SURPRISE_REMOVAL:
    93.         //
    94.         // Same as a remove device, but don't call IoDetach or IoDeleteDevice
    95.         //
    96.         devExt->SurpriseRemoved = TRUE;
    97.  
    98.         // Remove code here
    99.  
    100.         IoSkipCurrentIrpStackLocation(Irp);
    101.         status = IoCallDriver(devExt->TopOfStack, Irp);
    102.         break;
    103.  
    104.     case IRP_MN_REMOVE_DEVICE:
    105.        
    106.         devExt->Removed = TRUE;
    107.  
    108.         // remove code here
    109.         Irp->IoStatus.Status = STATUS_SUCCESS;
    110.        
    111.         IoSkipCurrentIrpStackLocation(Irp);
    112.         status = IoCallDriver(devExt->TopOfStack, Irp);
    113.  
    114.         IoDetachDevice(devExt->TopOfStack);
    115.         IoDeleteDevice(DeviceObject);
    116.  
    117.         break;
    118.  
    119.     case IRP_MN_QUERY_REMOVE_DEVICE:
    120.     case IRP_MN_QUERY_STOP_DEVICE:
    121.     case IRP_MN_CANCEL_REMOVE_DEVICE:
    122.     case IRP_MN_CANCEL_STOP_DEVICE:
    123.     case IRP_MN_FILTER_RESOURCE_REQUIREMENTS:
    124.     case IRP_MN_STOP_DEVICE:
    125.     case IRP_MN_QUERY_DEVICE_RELATIONS:
    126.     case IRP_MN_QUERY_INTERFACE:
    127.     case IRP_MN_QUERY_CAPABILITIES:
    128.     case IRP_MN_QUERY_DEVICE_TEXT:
    129.     case IRP_MN_QUERY_RESOURCES:
    130.     case IRP_MN_QUERY_RESOURCE_REQUIREMENTS:
    131.     case IRP_MN_READ_CONFIG:
    132.     case IRP_MN_WRITE_CONFIG:
    133.     case IRP_MN_EJECT:
    134.     case IRP_MN_SET_LOCK:
    135.     case IRP_MN_QUERY_ID:
    136.     case IRP_MN_QUERY_PNP_DEVICE_STATE:
    137.     default:
    138.         //
    139.         // Here the filter driver might modify the behavior of these IRPS
    140.         // Please see PlugPlay documentation for use of these IRPs.
    141.         //
    142.         IoSkipCurrentIrpStackLocation(Irp);
    143.         status = IoCallDriver(devExt->TopOfStack, Irp);
    144.         break;
    145.     }
    146.  
    147.     return status;
    148. }
    149.  
    150. NTSTATUS
    151. KbFilter_Complete(
    152.     IN PDEVICE_OBJECT   DeviceObject,
    153.     IN PIRP             Irp,
    154.     IN PVOID            Context
    155.     )
    156. /*++
    157. Routine Description:
    158.  
    159.     Generic completion routine that allows the driver to send the irp down the
    160.     stack, catch it on the way up, and do more processing at the original IRQL.
    161.    
    162. --*/
    163. {
    164.     PKEVENT  event;
    165.  
    166.     event = (PKEVENT) Context;
    167.  
    168.     UNREFERENCED_PARAMETER(DeviceObject);
    169.     UNREFERENCED_PARAMETER(Irp);
    170.  
    171.     //
    172.     // We could switch on the major and minor functions of the IRP to perform
    173.     // different functions, but we know that Context is an event that needs
    174.     // to be set.
    175.     //
    176.     KeSetEvent(event, 0, FALSE);
    177.  
    178.     //
    179.     // Allows the caller to use the IRP after it is completed
    180.     //
    181.     return STATUS_MORE_PROCESSING_REQUIRED;
    182. }
    Что нужно тут добавить чтобы получить lib? Мне нужна функция KbFilter_PnP. Visual Studio есть
     
  2. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.549
    Адрес:
    Russia
    Никак. Это код драйвера. И lib тут неуместен.
    Соберите исходник, и посмотрите ассемблерный листинг, раз в С не шарите.
     
  3. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    а может собрать .obj и слинковать с остальным кодом?
     
  4. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    а может тогда как-нибудь через *.obj прикрутить?
     
  5. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.549
    Адрес:
    Russia
    Llirik
    Куда вы это хотите прикрутить? Что вы имеете? У вас код драйвера на асме? Какой компилер асма юзаете? Какую из этих функций хотите встроить?
     
  6. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.254
    можно асм-обжы слинковать ддк-шным линкером например... можно наоборот... можно сделать это линкером студии, но чтобы собрать си-код вам так или иначе понадобятся либы и хедеры из ддк...
     
  7. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.549
    Адрес:
    Russia
    Rel
    Я почему спрашивал, просто мне не трудно конвертировать 1 процедурку с С на асм, надо тока понять че и куда он это вставляет. Может у него там обычное приложение. И он хочет туда код драйвера вставить. Кто его знает.. Тогда смысл конвертить..
     
  8. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    Пишу драйвер на MAMS32. DDK есть
     
  9. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.549
    Адрес:
    Russia
    Перевел на масм32 примерно. Сам там тестируй, мало ли, может где-то ошибься я.
    Код (Text):
    1. KbFilter_Complete proc pDeviceObject:PDEVICE_OBJECT, pIrp:PIRP, pContext:PVOID
    2.  
    3.     mov eax, pContext
    4.     invoke KeSetEvent, eax, 0, FALSE
    5.  
    6.     mov eax, STATUS_MORE_PROCESSING_REQUIRED
    7.     ret
    8.  
    9. KbFilter_Complete endp
    10.  
    11. KbFilter_PnP proc pDeviceObject:PDEVICE_OBJECT, pIrp:PIRP
    12.  
    13. local status:NTSTATUS
    14. local pDevExt:PDEVICE_EXTENSION
    15. local pIrpStack:PIO_STACK_LOCATION
    16. local oldIrql:KIRQL
    17. local event:KEVENT
    18.  
    19.     mov status, STATUS_SUCCESS
    20.    
    21.     invoke KeGetCurrentIrql
    22.     cmp eax, APC_LEVEL
    23.     ja _ACCESS
    24.    
    25.     mov eax, (DEVICE_EXTENSION ptr [pDeviceObject]).DeviceExtension
    26.     mov pDevExt, eax
    27.    
    28.     mov esi, pIrp
    29.     assume esi:ptr _IRP
    30.    
    31.     IoGetCurrentIrpStackLocation esi
    32.     mov edi, eax
    33.     assume edi:ptr IO_STACK_LOCATION
    34.  
    35.     cmp [edi].MinorFunction, IRP_MN_START_DEVICE
    36.     je START_DEVICE_SUB
    37.  
    38.     cmp [edi].MinorFunction, IRP_MN_SURPRISE_REMOVAL
    39.     je SURPRISE_REMOVAL_SUB
    40.    
    41.     cmp [edi].MinorFunction, IRP_MN_REMOVE_DEVICE
    42.     je REMOVE_DEVICE_SUB
    43.  
    44.     IoSkipCurrentIrpStackLocation esi
    45.     invoke IoCallDriver, (DEVICE_EXTENSION ptr [pDevExt]).TopOfStack, esi
    46.     ret
    47.        
    48. SURPRISE_REMOVAL_SUB:
    49.     mov (DEVICE_EXTENSION ptr [pDevExt]).SurpriseRemoved, TRUE
    50.     IoSkipCurrentIrpStackLocation esi
    51.    
    52.     invoke IoCallDriver, (DEVICE_EXTENSION ptr [pDevExt]).TopOfStack, esi
    53.     ret
    54.    
    55. REMOVE_DEVICE_SUB:
    56.     mov (DEVICE_EXTENSION ptr [pDevExt]).Removed, TRUE
    57.     mov [esi].IoStatus.Status, STATUS_SUCCESS
    58.  
    59.     IoSkipCurrentIrpStackLocation esi
    60.     invoke IoCallDriver, (DEVICE_EXTENSION ptr [pDevExt]).TopOfStack, esi
    61.  
    62.     invoke IoDetachDevice, (DEVICE_EXTENSION ptr [pDevExt]).TopOfStack
    63.     invoke IoDeleteDevice, pDeviceObject
    64.    
    65.     mov eax, status
    66.     ret
    67.        
    68. START_DEVICE_SUB:
    69.     IoCopyCurrentIrpStackLocationToNext esi
    70.     invoke KeInitializeEvent, addr event, NotificationEvent, FALSE
    71.  
    72.     IoSetCompletionRoutine esi, KbFilter_Complete, event, TRUE, TRUE, TRUE
    73.  
    74.     invoke IoCallDriver, (DEVICE_EXTENSION ptr [pDevExt]).TopOfStack, esi
    75.     mov [status], eax
    76.    
    77.     cmp eax, STATUS_PENDING
    78.     je WAIT_DRIVER
    79.     cmp eax, STATUS_SUCCESS
    80.     je CHK_SUCCESS
    81.     jmp EXIT_START_DEVICE_SUB
    82.    
    83. WAIT_DRIVER:
    84.     invoke KeWaitForSingleObject, addr event, Executive, KernelMode, FALSE, 0
    85.    
    86. CHK_SUCCESS:
    87.     cmp [esi].IoStatus.Status, STATUS_SUCCESS
    88.     je CHANGE_DEV_EXT
    89.     jmp EXIT_START_DEVICE_SUB
    90.    
    91. CHANGE_DEV_EXT:
    92.     mov (DEVICE_EXTENSION ptr [pDevExt]).Started, TRUE
    93.     mov (DEVICE_EXTENSION ptr [pDevExt]).Removed, FALSE
    94.     mov (DEVICE_EXTENSION ptr [pDevExt]).SurpriseRemoved, FALSE
    95.  
    96.  
    97. EXIT_START_DEVICE_SUB:
    98.     push status
    99.     pop [esi].IoStatus.Status
    100.     mov [esi].IoStatus.Information, 0
    101.    
    102.     assume esi:nothing
    103.    
    104.     invoke IoCompleteRequest, pIrp, IO_NO_INCREMENT
    105.    
    106.     mov eax, status
    107.     ret
    108.    
    109. _ACCESS:
    110.     ;generate access BP (dbgPrint is not recommended)
    111.     int 3
    112.    
    113.     mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
    114.     ret
    115.  
    116. KbFilter_PnP endp
     
  10. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    TermoSINteZ, огромное Вам спасибо, но к своему удивлению я не нашёл в inc`ах структуры DEVICE_EXTENSION, а нашёл только в *.h, прилагаемому к исходнику. не могли бы Вы и его перевести? а то я боюсь что-нибудь напутать)
    Код (Text):
    1. /*++
    2. Copyright (c) 1997  Microsoft Corporation
    3.  
    4. Module Name:
    5.  
    6.     kbfilter.h
    7.  
    8. Abstract:
    9.  
    10.     This module contains the common private declarations for the keyboard
    11.     packet filter
    12.  
    13. Environment:
    14.  
    15.     kernel mode only
    16.  
    17. Notes:
    18.  
    19.  
    20. Revision History:
    21.  
    22.  
    23. --*/
    24.  
    25. #ifndef KBFILTER_H
    26. #define KBFILTER_H
    27.  
    28. #include "ntddk.h"
    29. #include "kbdmou.h"
    30. #include <ntddkbd.h>
    31. #include <ntdd8042.h>
    32.  
    33. #define KBFILTER_POOL_TAG (ULONG) 'tlfK'
    34. #undef ExAllocatePool
    35. #define ExAllocatePool(type, size) \
    36.             ExAllocatePoolWithTag (type, size, KBFILTER_POOL_TAG)
    37.  
    38. #if DBG
    39.  
    40. #define TRAP()                      DbgBreakPoint()
    41. #define DbgRaiseIrql(_x_,_y_)       KeRaiseIrql(_x_,_y_)
    42. #define DbgLowerIrql(_x_)           KeLowerIrql(_x_)
    43.  
    44. #define DebugPrint(_x_) DbgPrint _x_
    45.  
    46. #else   // DBG
    47.  
    48. #define TRAP()
    49. #define DbgRaiseIrql(_x_,_y_)
    50. #define DbgLowerIrql(_x_)
    51.  
    52. #define DebugPrint(_x_)
    53.  
    54. #endif
    55.  
    56. #define MIN(_A_,_B_) (((_A_) < (_B_)) ? (_A_) : (_B_))
    57.  
    58. typedef struct _DEVICE_EXTENSION
    59. {
    60.     //
    61.     // A backpointer to the device object for which this is the extension
    62.     //
    63.     PDEVICE_OBJECT  Self;
    64.  
    65.     //
    66.     // "THE PDO"  (ejected by the root bus or ACPI)
    67.     //
    68.     PDEVICE_OBJECT  PDO;
    69.  
    70.     //
    71.     // The top of the stack before this filter was added.  AKA the location
    72.     // to which all IRPS should be directed.
    73.     //
    74.     PDEVICE_OBJECT  TopOfStack;
    75.  
    76.     //
    77.     // Number of creates sent down
    78.     //
    79.     LONG EnableCount;
    80.  
    81.     //
    82.     // The real connect data that this driver reports to
    83.     //
    84.     CONNECT_DATA UpperConnectData;
    85.  
    86.     //
    87.     // Previous initialization and hook routines (and context)
    88.     //                              
    89.     PVOID UpperContext;
    90.     PI8042_KEYBOARD_INITIALIZATION_ROUTINE UpperInitializationRoutine;
    91.     PI8042_KEYBOARD_ISR UpperIsrHook;
    92.  
    93.     //
    94.     // Write function from within KbFilter_IsrHook
    95.     //
    96.     IN PI8042_ISR_WRITE_PORT IsrWritePort;
    97.  
    98.     //
    99.     // Queue the current packet (ie the one passed into KbFilter_IsrHook)
    100.     //
    101.     IN PI8042_QUEUE_PACKET QueueKeyboardPacket;
    102.  
    103.     //
    104.     // Context for IsrWritePort, QueueKeyboardPacket
    105.     //
    106.     IN PVOID CallContext;
    107.  
    108.     //
    109.     // current power state of the device
    110.     //
    111.     DEVICE_POWER_STATE  DeviceState;
    112.  
    113.     BOOLEAN         Started;
    114.     BOOLEAN         SurpriseRemoved;
    115.     BOOLEAN         Removed;
    116.  
    117. } DEVICE_EXTENSION, *PDEVICE_EXTENSION;
    118.  
    119. //
    120. // Prototypes
    121. //
    122.  
    123. NTSTATUS
    124. KbFilter_AddDevice(
    125.     IN PDRIVER_OBJECT DriverObject,
    126.     IN PDEVICE_OBJECT BusDeviceObject
    127.     );
    128.  
    129. NTSTATUS
    130. KbFilter_CreateClose (
    131.     IN PDEVICE_OBJECT DeviceObject,
    132.     IN PIRP Irp
    133.     );
    134.  
    135. NTSTATUS
    136. KbFilter_DispatchPassThrough(
    137.         IN PDEVICE_OBJECT DeviceObject,
    138.         IN PIRP Irp
    139.         );
    140.    
    141. NTSTATUS
    142. KbFilter_InternIoCtl (
    143.     IN PDEVICE_OBJECT DeviceObject,
    144.     IN PIRP Irp
    145.     );
    146.  
    147. NTSTATUS
    148. KbFilter_IoCtl (
    149.     IN PDEVICE_OBJECT DeviceObject,
    150.     IN PIRP Irp
    151.     );
    152.  
    153. NTSTATUS
    154. KbFilter_PnP (
    155.     IN PDEVICE_OBJECT DeviceObject,
    156.     IN PIRP Irp
    157.     );
    158.  
    159. NTSTATUS
    160. KbFilter_Power (
    161.     IN PDEVICE_OBJECT DeviceObject,
    162.     IN PIRP Irp
    163.     );
    164.  
    165. NTSTATUS
    166. KbFilter_InitializationRoutine(
    167.     IN PDEVICE_OBJECT                 DeviceObject,    // InitializationContext
    168.     IN PVOID                           SynchFuncContext,
    169.     IN PI8042_SYNCH_READ_PORT          ReadPort,
    170.     IN PI8042_SYNCH_WRITE_PORT         WritePort,
    171.     OUT PBOOLEAN                       TurnTranslationOn
    172.     );
    173.  
    174. BOOLEAN
    175. KbFilter_IsrHook(
    176.     PDEVICE_OBJECT         DeviceObject,               // IsrContext
    177.     PKEYBOARD_INPUT_DATA   CurrentInput,
    178.     POUTPUT_PACKET         CurrentOutput,
    179.     UCHAR                  StatusByte,
    180.     PUCHAR                 DataByte,
    181.     PBOOLEAN               ContinueProcessing,
    182.     PKEYBOARD_SCAN_STATE   ScanState
    183.     );
    184.  
    185. VOID
    186. KbFilter_ServiceCallback(
    187.     IN PDEVICE_OBJECT DeviceObject,
    188.     IN PKEYBOARD_INPUT_DATA InputDataStart,
    189.     IN PKEYBOARD_INPUT_DATA InputDataEnd,
    190.     IN OUT PULONG InputDataConsumed
    191.     );
    192.  
    193. VOID
    194. KbFilter_Unload (
    195.     IN PDRIVER_OBJECT DriverObject
    196.     );
    197.  
    198. #endif  // KBFILTER_H
     
  11. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.549
    Адрес:
    Russia
    Llirik
    ну так и не нашли бы даже при всем желании. Если бы вы разобрались в стркутруре драйверов фильтров, то узнали бы, что это служебная структура, который программист объявляет сам, так как ему требуется по функционалу драйвера.
    Пример объявления на масме:
    Код (Text):
    1. DEVICE_EXTENSION struct
    2.     DeviceExtension PDEVICE_OBJECT ?
    3.     TopOfStack PDEVICE_OBJECT ?
    4.     devLock KSPIN_LOCK ?
    5.     SurpriseRemoved BOOLEAN ?
    6.     Started BOOLEAN ?
    7.     Removed BOOLEAN ?
    8. DEVICE_EXTENSION ends
    9. PDEVICE_EXTENSION typedef ptr DEVICE_EXTENSION
    Остальные параметры сами добавите похожим образом.
     
  12. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    TermoSINteZ, Огромное спасибо!! Всё получись! Драйвер заработал!
     
  13. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.549
    Адрес:
    Russia
    O_O. надо же. Я немного в щоке даже.
    И да, не за что :). Забудьте про линковку своих lib в ядре, и учите С и кодинг в кернеле. Пригодится.
     
  14. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    я ошибся) драйвер не совсем заработал) Можно ещё Вас попросить перевести ещё один маленький кусочек:
    Код (Text):
    1.     ASSERT(devExt->TopOfStack);
    2.  
    3.     devExt->Self =          device;
    4.     devExt->PDO =           PDO;
    5.     devExt->DeviceState =   PowerDeviceD0;
    6.  
    7.     devExt->SurpriseRemoved = FALSE;
    8.     devExt->Removed =         FALSE;
    9.     devExt->Started =         FALSE;
    10.  
    11.     device->Flags |= (DO_BUFFERED_IO | DO_POWER_PAGABLE);
    12.     device->Flags &= ~DO_DEVICE_INITIALIZING;
    Особенно ASSERT(devExt->TopOfStack);
    Остальную часть функции я сам уже перевёл)
     
  15. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.549
    Адрес:
    Russia
    Llirik
    Это просто проверка devExt->TopOfStack на ноль
    если нулевой указатель, то остановить работу драйвера (по сути можете вызвать креш принудительный или бряк). При чем этот макрос работает только когда проект компилируется в режиме отладки. В релизе он игнорируется (читайте как удаление этой строки).
     
  16. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Ну ты брат утилиту нашел )))

    Термо_С_to_asm.exe
    )))
     
  17. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    Мне ещё с Flags немножко не понятно
     
  18. TermoSINteZ

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

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.549
    Адрес:
    Russia
    Llirik
    ну примерно так, если я из ума не вышел:
    Код (Text):
    1. mov edx, device
    2. assume edx:ptr DRIVER_OBJECT
    3. or [edx].Flags, DO_BUFFERED_IO or DO_POWER_PAGABLE
    4. and [edx].Flags, not DO_DEVICE_INITIALIZING
    5. assume edx:nothing
     
  19. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    TermoSINteZ, Всё! СПАСИБО!!!!!!!!!! Теперь мой драйвер работает 100%)
     
  20. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    А как это сделать? Имею ввиду obj к asm`у