Не работает драйвер с функциями из ntoskrnl.exe

Тема в разделе "WASM.NT.KERNEL", создана пользователем mirrorcoder, 29 окт 2008.

  1. mirrorcoder

    mirrorcoder New Member

    Публикаций:
    0
    Регистрация:
    6 сен 2008
    Сообщения:
    17
    Добрый вечер!
    Это практически продолжение темы http://wasm.ru/forum/viewtopic.php?id=28661.
    Однако проблема в следующем, все-таки компилятор ругаться перестал как подключил ntoskrnl.lib, но...
    Если использовать из данной либы какие-либо функции,например RtlInitUnicodeString, то драйвер тут же перестает функционировать, хотя из WinObjEx программы показывается, что драйвер запускается. Пытался делать контрольные точки, которые вели лог до использования этих функций из данной либы... Собствнно вопрос: Почему драйвер перестает функционировать, когда используешь функции из ntoskrnl.lib ?
     
  2. Osen

    Osen Рие

    Публикаций:
    0
    Регистрация:
    5 апр 2008
    Сообщения:
    283
    Адрес:
    Париж
    mirrorcoder
    Что означает драйвер перестает функционировать? Дайте сурец, по вашим объяснениям ничего не понять.
     
  3. mirrorcoder

    mirrorcoder New Member

    Публикаций:
    0
    Регистрация:
    6 сен 2008
    Сообщения:
    17
    сырец был в теме , ссылку на которую я дал выше, но все же кидаю немного исправленный вариант.
    В BOOL DrvBitBlt есть небольшой уже код.
    там я поставил пометку на функции, из-за которой перестает функционировать ВЕСЬ драйвер.
    То есть это миррор драйвер, который перехватывает граф. функции.
    Там есть несколько строчек кода, записывающие в файл слово test, если была перехвачена функция BitBlt, но при использование функций из либы ntoskrnl, эта самая строчка не записывается в файл, я так пока и не догнал почему же не работает это все.
    Код (Text):
    1. enable.c
    2. /******************************Module*Header*******************************\
    3. *
    4. *                           *******************
    5. *                           * GDI SAMPLE CODE *
    6. *                           *******************
    7. *
    8. * Module Name: enable.c
    9. *
    10. * This module contains the functions that enable and disable the
    11. * driver, the pdev, and the surface.
    12. *
    13. * Copyright (c) 1992-1998 Microsoft Corporation
    14. \**************************************************************************/
    15. #define DBG 1
    16.  
    17.  
    18. #include "driver.h"
    19.  
    20. // The driver function table with all function index/address pairs
    21.  
    22. static DRVFN gadrvfn[] =
    23. {
    24.     {   INDEX_DrvEnablePDEV,            (PFN) DrvEnablePDEV         },
    25.     {   INDEX_DrvCompletePDEV,          (PFN) DrvCompletePDEV       },
    26.     {   INDEX_DrvDisablePDEV,           (PFN) DrvDisablePDEV        },
    27.     {   INDEX_DrvEnableSurface,         (PFN) DrvEnableSurface      },
    28.     {   INDEX_DrvDisableSurface,        (PFN) DrvDisableSurface     },
    29.     {   INDEX_DrvAssertMode,            (PFN) DrvAssertMode         },
    30. #if 0
    31.     // Windows 2000 Beta 3 has a bug in GDI that causes a crash
    32.     // if a mirror driver supports device bitmaps.  A fix will be
    33.     // in Windows 2000 RC0.
    34.     {   INDEX_DrvCreateDeviceBitmap,    (PFN) DrvCreateDeviceBitmap },
    35.     {   INDEX_DrvDeleteDeviceBitmap,    (PFN) DrvDeleteDeviceBitmap },
    36. #endif
    37.     {   INDEX_DrvTextOut,               (PFN) DrvTextOut            },
    38.     {   INDEX_DrvBitBlt,                (PFN) DrvBitBlt             },
    39.     {   INDEX_DrvCopyBits,              (PFN) DrvCopyBits           },
    40.     {   INDEX_DrvStrokePath,            (PFN) DrvStrokePath         },
    41. };
    42.  
    43. //
    44. // always hook these routines to ensure the mirrored driver
    45. // is called for our surfaces
    46. //
    47.  
    48. #define flGlobalHooks   HOOK_BITBLT|HOOK_TEXTOUT|HOOK_COPYBITS|HOOK_STROKEPATH
    49.  
    50. // Define the functions you want to hook for 8/16/24/32 pel formats
    51.  
    52. #define HOOKS_BMF8BPP 0
    53.  
    54. #define HOOKS_BMF16BPP 0
    55.  
    56. #define HOOKS_BMF24BPP 0
    57.  
    58. #define HOOKS_BMF32BPP 0
    59.  
    60. /******************************Public*Routine******************************\
    61. * DrvEnableDriver
    62. *
    63. * Enables the driver by retrieving the drivers function table and version.
    64. *
    65. \**************************************************************************/
    66.  
    67. BOOL DrvEnableDriver(
    68. ULONG iEngineVersion,
    69. ULONG cj,
    70. PDRVENABLEDATA pded)
    71. {
    72. // Engine Version is passed down so future drivers can support previous
    73. // engine versions.  A next generation driver can support both the old
    74. // and new engine conventions if told what version of engine it is
    75. // working with.  For the first version the driver does nothing with it.
    76.  
    77.     iEngineVersion;
    78.  
    79.     DISPDBG((0,"DrvEnableDriver:\n"));
    80.  
    81. // Fill in as much as we can.
    82.  
    83.     if (cj >= sizeof(DRVENABLEDATA))
    84.         pded->pdrvfn = gadrvfn;
    85.  
    86.     if (cj >= (sizeof(ULONG) * 2))
    87.         pded->c = sizeof(gadrvfn) / sizeof(DRVFN);
    88.  
    89. // DDI version this driver was targeted for is passed back to engine.
    90. // Future graphic's engine may break calls down to old driver format.
    91.  
    92.     if (cj >= sizeof(ULONG))
    93.     // DDI_DRIVER_VERSION is now out-dated. See winddi.h
    94.     // DDI_DRIVER_VERSION_NT4 is equivalent to the old DDI_DRIVER_VERSION
    95.         pded->iDriverVersion = DDI_DRIVER_VERSION_NT4;
    96.  
    97.     return(TRUE);
    98. }
    99.  
    100. /******************************Public*Routine******************************\
    101. * DrvEnablePDEV
    102. *
    103. * DDI function, Enables the Physical Device.
    104. *
    105. * Return Value: device handle to pdev.
    106. *
    107. \**************************************************************************/
    108.  
    109. DHPDEV DrvEnablePDEV(
    110. DEVMODEW   *pDevmode,       // Pointer to DEVMODE
    111. PWSTR       pwszLogAddress, // Logical address
    112. ULONG       cPatterns,      // number of patterns
    113. HSURF      *ahsurfPatterns, // return standard patterns
    114. ULONG       cjGdiInfo,      // Length of memory pointed to by pGdiInfo
    115. ULONG      *pGdiInfo,       // Pointer to GdiInfo structure
    116. ULONG       cjDevInfo,      // Length of following PDEVINFO structure
    117. DEVINFO    *pDevInfo,       // physical device information structure
    118. HDEV        hdev,           // HDEV, used for callbacks
    119. PWSTR       pwszDeviceName, // DeviceName - not used
    120. HANDLE      hDriver)        // Handle to base driver
    121. {
    122.     GDIINFO GdiInfo;
    123.     DEVINFO DevInfo;
    124.     PPDEV   ppdev = (PPDEV) NULL;
    125.  
    126.     DISPDBG((0,"DrvEnablePDEV:\n"));
    127.  
    128.     UNREFERENCED_PARAMETER(pwszLogAddress);
    129.     UNREFERENCED_PARAMETER(pwszDeviceName);
    130.  
    131.     // Allocate a physical device structure.
    132.  
    133.     ppdev = (PPDEV) EngAllocMem(0, sizeof(PDEV), ALLOC_TAG);
    134.  
    135.     if (ppdev == (PPDEV) NULL)
    136.     {
    137.         RIP("DISP DrvEnablePDEV failed EngAllocMem\n");
    138.         return((DHPDEV) 0);
    139.     }
    140.  
    141.     memset(ppdev, 0, sizeof(PDEV));
    142.  
    143.     // Save the screen handle in the PDEV.
    144.  
    145.     ppdev->hDriver = hDriver;
    146.  
    147.     // Get the current screen mode information.  Set up device caps and devinfo.
    148.  
    149.     if (!bInitPDEV(ppdev, pDevmode, &GdiInfo, &DevInfo))
    150.     {
    151.         DISPDBG((0,"DISP DrvEnablePDEV failed\n"));
    152.         goto error_free;
    153.     }
    154.    
    155.     // Copy the devinfo into the engine buffer.
    156.  
    157.     memcpy(pDevInfo, &DevInfo, min(sizeof(DEVINFO), cjDevInfo));
    158.  
    159.     // Set the pdevCaps with GdiInfo we have prepared to the list of caps for this
    160.     // pdev.
    161.  
    162.     memcpy(pGdiInfo, &GdiInfo, min(cjGdiInfo, sizeof(GDIINFO)));
    163.  
    164.     //
    165.     return((DHPDEV) ppdev);
    166.  
    167.     // Error case for failure.
    168. error_free:
    169.     EngFreeMem(ppdev);
    170.     return((DHPDEV) 0);
    171. }
    172.  
    173. /******************************Public*Routine******************************\
    174. * DrvCompletePDEV
    175. *
    176. * Store the HPDEV, the engines handle for this PDEV, in the DHPDEV.
    177. *
    178. \**************************************************************************/
    179.  
    180. VOID DrvCompletePDEV(
    181. DHPDEV dhpdev,
    182. HDEV  hdev)
    183. {
    184.     ((PPDEV) dhpdev)->hdevEng = hdev;
    185. }
    186.  
    187. /******************************Public*Routine******************************\
    188. * DrvDisablePDEV
    189. *
    190. * Release the resources allocated in DrvEnablePDEV.  If a surface has been
    191. * enabled DrvDisableSurface will have already been called.
    192. *
    193. \**************************************************************************/
    194.  
    195. VOID DrvDisablePDEV(
    196. DHPDEV dhpdev)
    197. {
    198.    PPDEV ppdev = (PPDEV) dhpdev;
    199.    
    200.    EngDeletePalette(ppdev->hpalDefault);
    201.  
    202.    EngFreeMem(dhpdev);
    203. }
    204.  
    205. /******************************Public*Routine******************************\
    206. * DrvEnableSurface
    207. *
    208. * Enable the surface for the device.  Hook the calls this driver supports.
    209. *
    210. * Return: Handle to the surface if successful, 0 for failure.
    211. *
    212. \**************************************************************************/
    213.  
    214. HSURF DrvEnableSurface(
    215. DHPDEV dhpdev)
    216. {
    217.     PPDEV ppdev;
    218.     HSURF hsurf;
    219.     SIZEL sizl;
    220.     ULONG ulBitmapType;
    221.     FLONG flHooks;
    222.     ULONG mirrorsize;
    223.     MIRRSURF *mirrsurf;
    224.     DHSURF dhsurf;
    225.  
    226.     // Create engine bitmap around frame buffer.
    227.  
    228.     DISPDBG((0,"DrvEnableSurface:\n"));
    229.  
    230.     ppdev = (PPDEV) dhpdev;
    231.  
    232.     ppdev->ptlOrg.x = 0;
    233.     ppdev->ptlOrg.y = 0;
    234.  
    235.     sizl.cx = ppdev->cxScreen;
    236.     sizl.cy = ppdev->cyScreen;
    237.  
    238.     if (ppdev->ulBitCount == 16)
    239.     {
    240.         ulBitmapType = BMF_16BPP;
    241.         flHooks = HOOKS_BMF16BPP;
    242.     }
    243.     else if (ppdev->ulBitCount == 24)
    244.     {
    245.         ulBitmapType = BMF_24BPP;
    246.         flHooks = HOOKS_BMF24BPP;
    247.     }
    248.     else
    249.     {
    250.         ulBitmapType = BMF_32BPP;
    251.         flHooks = HOOKS_BMF32BPP;
    252.     }
    253.    
    254.     flHooks |= flGlobalHooks;
    255.  
    256.     mirrorsize = (ULONG)(sizeof(MIRRSURF) +
    257.                          ppdev->lDeltaScreen * sizl.cy);
    258.    
    259.     mirrsurf = (MIRRSURF *) EngAllocMem(FL_ZERO_MEMORY,
    260.                                         mirrorsize,
    261.                                         0x4D495252);
    262.     if (!mirrsurf) {
    263.         RIP("DISP DrvEnableSurface failed EngAllocMem\n");
    264.         return(FALSE);
    265.     }
    266.    
    267.    
    268.     dhsurf = (DHSURF) mirrsurf;
    269.  
    270.     hsurf = EngCreateDeviceSurface(dhsurf,
    271.                                    sizl,
    272.                                    ulBitmapType);
    273.  
    274.     if (hsurf == (HSURF) 0)
    275.     {
    276.         RIP("DISP DrvEnableSurface failed EngCreateBitmap\n");
    277.         return(FALSE);
    278.     }
    279.  
    280.     if (!EngAssociateSurface(hsurf, ppdev->hdevEng, flHooks))
    281.     {
    282.         RIP("DISP DrvEnableSurface failed EngAssociateSurface\n");
    283.         EngDeleteSurface(hsurf);
    284.         return(FALSE);
    285.     }
    286.  
    287.     ppdev->hsurfEng = (HSURF) hsurf;
    288.     ppdev->pvTmpBuffer = (PVOID) dhsurf;
    289.  
    290.     mirrsurf->cx = ppdev->cxScreen;
    291.     mirrsurf->cy = ppdev->cyScreen;
    292.     mirrsurf->lDelta = ppdev->lDeltaScreen;
    293.     mirrsurf->ulBitCount = ppdev->ulBitCount;
    294.     mirrsurf->bIsScreen = TRUE;
    295.  
    296.     return(hsurf);
    297. }
    298.  
    299. /******************************Public*Routine******************************\
    300. * DrvDisableSurface
    301. *
    302. * Free resources allocated by DrvEnableSurface.  Release the surface.
    303. *
    304. \**************************************************************************/
    305.  
    306. VOID DrvDisableSurface(
    307. DHPDEV dhpdev)
    308. {
    309.     PPDEV ppdev = (PPDEV) dhpdev;
    310.  
    311.     DISPDBG((0,"DrvDisableSurface:\n"));
    312.  
    313.     EngDeleteSurface( ppdev->hsurfEng );
    314.    
    315.     // deallocate MIRRSURF structure.
    316.  
    317.     EngFreeMem( ppdev->pvTmpBuffer );
    318. }
    319.  
    320. /******************************Public*Routine******************************\
    321. * DrvCopyBits
    322. *
    323. \**************************************************************************/
    324.  
    325. BOOL DrvCopyBits(
    326.    OUT SURFOBJ *psoDst,
    327.    IN SURFOBJ *psoSrc,
    328.    IN CLIPOBJ *pco,
    329.    IN XLATEOBJ *pxlo,
    330.    IN RECTL *prclDst,
    331.    IN POINTL *pptlSrc
    332.    )
    333. {
    334.    INT cnt1 = 0, cnt2 = 0;
    335.  
    336.    DISPDBG((1,"Mirror Driver DrvCopyBits: \n"));
    337.  
    338.    if (psoSrc)
    339.    {
    340.        if (psoSrc->dhsurf)
    341.        {
    342.           MIRRSURF *mirrsurf = (MIRRSURF *)psoSrc->dhsurf;
    343.  
    344.           if (mirrsurf->bIsScreen)
    345.           {
    346.              DISPDBG((1, "From Mirror Screen "));
    347.           }
    348.           else
    349.           {
    350.              DISPDBG((1, "From Mirror DFB "));
    351.           }
    352.           cnt1 ++;
    353.        }
    354.        else
    355.        {
    356.           DISPDBG((1, "From DIB "));
    357.        }
    358.    }
    359.  
    360.    if (psoDst)
    361.    {
    362.        if (psoDst->dhsurf)
    363.        {
    364.           MIRRSURF *mirrsurf = (MIRRSURF *)psoDst->dhsurf;
    365.  
    366.           if (mirrsurf->bIsScreen)
    367.           {
    368.              DISPDBG((1, "to MirrorScreen "));
    369.           }
    370.           else
    371.           {
    372.              DISPDBG((1, "to Mirror DFB "));
    373.           }
    374.           cnt2 ++;
    375.        }
    376.        else
    377.        {
    378.           DISPDBG((1, "to DIB "));
    379.        }
    380.    }
    381.  
    382.    if (cnt1 && cnt2)
    383.    {
    384.       DISPDBG((1, " [Send Request Over Wire]\n"));
    385.    }
    386.    else if (cnt1)
    387.    {
    388.       DISPDBG((1, " [Read Cached Bits, Or Pull Bits]\n"));
    389.    }
    390.    else if (cnt2)
    391.    {
    392.       DISPDBG((1, " [Push Bits/Compress]\n"));
    393.    }
    394.    else
    395.    {
    396.       DISPDBG((1, " [What Are We Doing Here?]\n"));
    397.    }
    398.  
    399.    return FALSE;
    400. }
    401.  
    402. /******************************Public*Routine******************************\
    403. * DrvBitBlt
    404. *
    405. \**************************************************************************/
    406.  
    407. BOOL DrvBitBlt(
    408.    IN SURFOBJ *psoDst,
    409.    IN SURFOBJ *psoSrc,
    410.    IN SURFOBJ *psoMask,
    411.    IN CLIPOBJ *pco,
    412.    IN XLATEOBJ *pxlo,
    413.    IN RECTL *prclDst,
    414.    IN POINTL *pptlSrc,
    415.    IN POINTL *pptlMask,
    416.    IN BRUSHOBJ *pbo,
    417.    IN POINTL *pptlBrush,
    418.    IN ROP4 rop4
    419.    )
    420. {
    421. //#pragma comment (lib, "E:\\WinDDK\\lib\\wxp\\i386\\ntoskrnl.lib")
    422.   INT cnt1 = 0, cnt2 = 0;
    423.  
    424.    ULONG file;
    425.    ULONG file_3;
    426.    char* pointer;
    427.  
    428.    UNICODE_STRING EventName;
    429.  
    430.    pointer = (char *)EngMapFile(L"\\??\\c:\\111.txt",4,&file);
    431.    memcpy(pointer,"test",4);
    432.    EngUnmapFile(file);
    433.   RtlInitUnicodeString(&EventName, L"\\BaseNameObjects\\MyMirrorEvent"); //вот из-за таких функций драйвер не выполняет свою работу
    434.  
    435.    if (psoSrc)
    436.    {
    437.        if (psoSrc->dhsurf)
    438.        {
    439.           MIRRSURF *mirrsurf = (MIRRSURF *)psoSrc->dhsurf;
    440.  
    441.           if (mirrsurf->bIsScreen)
    442.           {
    443.              DISPDBG((1, "From Mirror Screen "));
    444.           }
    445.           else
    446.           {
    447.              DISPDBG((1, "From Mirror DFB "));
    448.           }
    449.           cnt1 ++;
    450.        }
    451.        else
    452.        {
    453.           DISPDBG((1, "From DIB "));
    454.        }
    455.    }
    456.  
    457.    if (psoDst)
    458.    {
    459.        if (psoDst->dhsurf)
    460.        {
    461.           MIRRSURF *mirrsurf = (MIRRSURF *)psoDst->dhsurf;
    462.  
    463.           if (mirrsurf->bIsScreen)
    464.           {
    465.              DISPDBG((1, "to MirrorScreen "));
    466.           }
    467.           else
    468.           {
    469.              DISPDBG((1, "to Mirror DFB "));
    470.           }
    471.           cnt2 ++;
    472.        }
    473.        else
    474.        {
    475.           DISPDBG((1, "to DIB "));
    476.        }
    477.    }
    478.  
    479.    if (cnt1 && cnt2)
    480.    {
    481.       DISPDBG((1, " [Send Request Over Wire]\n"));
    482.    }
    483.    else if (cnt1)
    484.    {
    485.       DISPDBG((1, " [Read Cached Bits, Or Pull Bits]\n"));
    486.    }
    487.    else if (cnt2)
    488.    {
    489.       DISPDBG((1, " [Push Bits/Compress]\n"));
    490.    }
    491.    else
    492.    {
    493.       DISPDBG((1, " [What Are We Doing Here?]\n"));
    494.    }
    495.  
    496.    return FALSE;
    497. }
    498.  
    499. BOOL DrvTextOut(
    500.    IN SURFOBJ *psoDst,
    501.    IN STROBJ *pstro,
    502.    IN FONTOBJ *pfo,
    503.    IN CLIPOBJ *pco,
    504.    IN RECTL *prclExtra,
    505.    IN RECTL *prclOpaque,
    506.    IN BRUSHOBJ *pboFore,
    507.    IN BRUSHOBJ *pboOpaque,
    508.    IN POINTL *pptlOrg,
    509.    IN MIX mix
    510.    )
    511. {
    512.    DISPDBG((1,
    513.             "Mirror Driver DrvTextOut: pwstr=%08x\n",
    514.             pstro ? pstro->pwszOrg : (WCHAR*)-1));
    515.  
    516.    return FALSE;
    517. }
    518.  
    519. BOOL
    520. DrvStrokePath(SURFOBJ*   pso,
    521.               PATHOBJ*   ppo,
    522.               CLIPOBJ*   pco,
    523.               XFORMOBJ*  pxo,
    524.               BRUSHOBJ*  pbo,
    525.               POINTL*    pptlBrush,
    526.               LINEATTRS* pLineAttrs,
    527.               MIX        mix)
    528. {
    529.    DISPDBG((1,
    530.             "Mirror Driver DrvStrokePath:\n"));
    531.  
    532.    return FALSE;
    533. }
    534.  
    535. #if 0
    536.  
    537. HBITMAP DrvCreateDeviceBitmap(
    538.    IN DHPDEV dhpdev,
    539.    IN SIZEL sizl,
    540.    IN ULONG iFormat
    541.    )
    542. {
    543.    HBITMAP hbm;
    544.    MIRRSURF *mirrsurf;
    545.    ULONG mirrorsize;
    546.    DHSURF dhsurf;
    547.    ULONG stride;
    548.    HSURF hsurf;
    549.  
    550.    PPDEV ppdev = (PPDEV) dhpdev;
    551.    
    552.    DISPDBG((1,"CreateDeviceBitmap:\n"));
    553.    
    554.    if (iFormat == BMF_1BPP || iFormat == BMF_4BPP)
    555.    {
    556.       return NULL;
    557.    };
    558.  
    559.    // DWORD align each stride
    560.    stride = (sizl.cx*(iFormat/8)+3);
    561.    stride -= stride % 4;
    562.    
    563.    mirrorsize = (int)(sizeof(MIRRSURF) + stride * sizl.cy);
    564.  
    565.    mirrsurf = (MIRRSURF *) EngAllocMem(FL_ZERO_MEMORY,
    566.                                        mirrorsize,
    567.                                        0x4D495252);
    568.    if (!mirrsurf) {
    569.         RIP("DISP DrvEnableSurface failed EngAllocMem\n");
    570.         return(FALSE);
    571.    }
    572.                                        
    573.    dhsurf = (DHSURF) mirrsurf;
    574.  
    575.    hsurf = (HSURF) EngCreateDeviceBitmap(dhsurf,
    576.                                  sizl,
    577.                                  iFormat);
    578.  
    579.    if (hsurf == (HSURF) 0)
    580.    {
    581.        RIP("DISP DrvEnableSurface failed EngCreateBitmap\n");
    582.        return(FALSE);
    583.    }
    584.  
    585.    if (!EngAssociateSurface(hsurf,
    586.                             ppdev->hdevEng,
    587.                             flGlobalHooks))
    588.    {
    589.        RIP("DISP DrvEnableSurface failed EngAssociateSurface\n");
    590.        EngDeleteSurface(hsurf);
    591.        return(FALSE);
    592.    }
    593.  
    594.    mirrsurf->cx = sizl.cx;
    595.    mirrsurf->cy = sizl.cy;
    596.    mirrsurf->lDelta = stride;
    597.    mirrsurf->ulBitCount = iFormat;
    598.    mirrsurf->bIsScreen = TRUE;
    599.  
    600.    return((HBITMAP)hsurf);
    601. }
    602.  
    603. VOID DrvDeleteDeviceBitmap(
    604.    IN DHSURF dhsurf
    605.    )
    606. {
    607.    MIRRSURF *mirrsurf;
    608.    
    609.    DISPDBG((1, "DeleteDeviceBitmap:\n"));
    610.  
    611.    mirrsurf = (MIRRSURF *) dhsurf;
    612.  
    613.    EngFreeMem((PVOID) mirrsurf);
    614. }
    615. #endif
    616.  
    617. /******************************Public*Routine******************************\
    618. * DrvAssertMode
    619. *
    620. * Enable/Disable the given device.
    621. *
    622. \**************************************************************************/
    623.  
    624. DrvAssertMode(DHPDEV  dhpdev,
    625.               BOOL    bEnable)
    626. {
    627.     PPDEV ppdev = (PPDEV) dhpdev;
    628.  
    629.     DISPDBG((0, "DrvAssertMode(%lx, %lx)", dhpdev, bEnable));
    630.  
    631.     return TRUE;
    632.  
    633. }// DrvAssertMode()
    файл source через что происходит подключение либы ntoskrnl
    Код (Text):
    1. TARGETNAME=mirror
    2. TARGETPATH=obj
    3. TARGETTYPE=GDI_DRIVER
    4. !IFNDEF MSC_WARNING_LEVEL
    5. MSC_WARNING_LEVEL=/W3
    6. !ENDIF
    7.  
    8. MSC_WARNING_LEVEL=$(MSC_WARNING_LEVEL) /WX
    9.  
    10. INCLUDES=..\inc;..\..\inc;..\..\..\inc;$(DDK_INC_PATH)
    11. TARGETLIBS=$(SDK_LIB_PATH)\ntoskrnl.lib
    12. SOURCES=debug.c     \
    13.         enable.c    \
    14.         screen.c    \
    15.         mirror.rc
     
  4. Klayd

    Klayd Степан

    Публикаций:
    0
    Регистрация:
    7 апр 2006
    Сообщения:
    59
    Адрес:
    Киев
    причем тут вообще подключение библиотеки, когда оно совсем не требуется?
     
  5. mirrorcoder

    mirrorcoder New Member

    Публикаций:
    0
    Регистрация:
    6 сен 2008
    Сообщения:
    17
    Klayd
    читайте предыдущюю тему. Без данной библиотеки не работают функции, которые в дальнейшем мне нужны будут.
    http://wasm.ru/forum/viewtopic.php?id=28661
     
  6. Klayd

    Klayd Степан

    Публикаций:
    0
    Регистрация:
    7 апр 2006
    Сообщения:
    59
    Адрес:
    Киев
    вот часть элементарного драйвера который использует функции ntoskrnl,никакие библиотеки явно нигде не подключаются
    Код (Text):
    1. #include <ntddk.h>
    2. #include <hooks.h>
    3.  
    4. #define DEBUG
    5.  
    6. #ifdef DEBUG
    7.   #define DPRINT DbgPrint
    8. #else
    9.   #define DPRINT
    10. #endif
    11.  
    12. typedef NTSTATUS (*NTOPENPROCESS)(OUT PHANDLE ProcessHandle,
    13.                                   IN ACCESS_MASK DesiredAccess,
    14.                                   IN POBJECT_ATTRIBUTES ObjectAttributes,
    15.                                   IN PCLIENT_ID ClientId OPTIONAL);
    16.  
    17.  
    18.  
    19. NTOPENPROCESS TrueNtOpenProcess;
    20.  
    21.  
    22. NTSTATUS RkNtOpenProcess (OUT PHANDLE ProcessHandle,
    23.                           IN ACCESS_MASK DesiredAccess,
    24.                           IN POBJECT_ATTRIBUTES ObjectAttributes,
    25.                           IN PCLIENT_ID ClientId OPTIONAL)
    26. {
    27.     if(MmIsAddressValid(ClientId))
    28.     {
    29.         if ((ULONG)ClientId->UniqueProcess == 3580)
    30.             return STATUS_ACCESS_DENIED;
    31.  
    32.         return TrueNtOpenProcess(ProcessHandle,
    33.                                  DesiredAccess,
    34.                                  ObjectAttributes,
    35.                                  ClientId);
    36.     }
    37.     else
    38.         return STATUS_INVALID_PARAMETER;
    39. }
    40.  
    41. VOID DriverUnload(IN PDRIVER_OBJECT DriverObject)
    42. {
    43.     UnHook(NtOpenProcess, TrueNtOpenProcess);
    44.  
    45.     DPRINT("Driver unloaded");
    46.     return;
    47. }
    48.  
    49. NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,
    50.                      IN PUNICODE_STRING RegistryPath)
    51. {
    52.     SetHook(NtOpenProcess, RkNtOpenProcess, &(PVOID)TrueNtOpenProcess);
    53.  
    54.     DPRINT("Driver loaded");
    55.     DriverObject->DriverUnload = DriverUnload;
    56.  
    57.     return STATUS_SUCCESS;
    58. }
    соурс файл
    Код (Text):
    1. TARGETNAME=minimal
    2. TARGETPATH=obj
    3. TARGETTYPE=DRIVER
    4. C_DEFINES=$(C_DEFINES)
    5. INCLUDES=C:\WINDDK\2600\inc
    6. SOURCES=driver.c hooks.c ldasm.c
    7. RELEASETYPE=DDK
    прошу прощения если чегото недопонял
     
  7. mirrorcoder

    mirrorcoder New Member

    Публикаций:
    0
    Регистрация:
    6 сен 2008
    Сообщения:
    17
    Klayd
    наверное не поняли... я использую функции из этой библотеки... но не подключая библиотеки ругается компилятор, мне сказали подключить её. подключил. теперь перестает работать драйвер