LdrGetDllHandle

Тема в разделе "WASM.WIN32", создана пользователем DarkK, 5 янв 2005.

  1. DarkK

    DarkK New Member

    Публикаций:
    0
    Регистрация:
    12 июн 2004
    Сообщения:
    9
    Адрес:
    Russia
    что значит, когда первым параметром этой функции передается TRUE или FALSE ?

    если со строкой еще более-менее понятно, то дальше - темный лес...

    исходники wine молчат, google выдал 50 ссылок, ни на одной ничего путнего не нашел, softice + кружка матэ тоже к просветелению путь не указали...



    или вообще есль какой-либо более "честный" способ реализовать GetModuleHandle ?
     
  2. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Случайно где-то нашел :
    Код (Text):
    1.  
    2. NTSTATUS
    3. LdrGetDllHandle (
    4.     IN PWSTR DllPath OPTIONAL,
    5.     IN PULONG DllCharacteristics OPTIONAL,
    6.     IN PUNICODE_STRING DllName,
    7.     OUT PVOID *DllHandle
    8.     )
    9.  
    10. /*++
    11.  
    12. Routine Description:
    13.  
    14.     This function locates the specified DLL and returns its handle.
    15.  
    16. Arguments:
    17.  
    18.     DllPath - Supplies the search path to be used to locate the DLL.
    19.  
    20.     DllCharacteristics - Supplies an optional DLL characteristics flag,
    21.         that if specified is used to match against the dll being loaded.
    22.  
    23.     DllName - Supplies the name of the DLL to load.
    24.  
    25.     DllHandle - Returns a handle to the loaded DLL.
    26.  
    27. Return Value:
    28.  
    29.     TBD
    30.  
    31. --*/
    32.  
     
  3. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    S_T_A_S_



    Знаю я такие случайности ;)
     
  4. DarkK

    DarkK New Member

    Публикаций:
    0
    Регистрация:
    12 июн 2004
    Сообщения:
    9
    Адрес:
    Russia
    Supplies the search path to be used to locate the DLL.

    вот я и спрашиваю, что значит, когда этим параметров передают 0x00000000 и 0x00000001... как бы это на PWSTR мало похоже %)



    DllCharacteristics, кстати, за два дня так ни разу ненулевым и не увидел.



    просто третий день медетирую в попытках написать обертку GetModuleHandle и "нииии ччегонипонимаю" (с) колобки
     
  5. DarkK

    DarkK New Member

    Публикаций:
    0
    Регистрация:
    12 июн 2004
    Сообщения:
    9
    Адрес:
    Russia
    при условии, что usName = {size, length, L"ntdll.dll"}

    и

    LdrGetDllHandle(0, 0, &usName, &hMod)

    и

    LdrGetDllHandle(1, 0, &usName, &hMod)

    и

    LdrGetDllHandle(L"C:\winnt\system32;", 0, &usName, &hMod)



    мне возвращают 0xC0000135



    я в полной растерянности...
     
  6. Zufyxe

    Zufyxe New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2004
    Сообщения:
    137
    Адрес:
    Russia
    - а ты не мучайся и используй NtQuerySystemInformation :)
     
  7. DarkK

    DarkK New Member

    Публикаций:
    0
    Регистрация:
    12 июн 2004
    Сообщения:
    9
    Адрес:
    Russia
    NtQuerySystemInformation

    почитал MSDN, побегал по гуглу...

    честно говоря, так и не понял, чем оно мне помочь может.
     
  8. Zufyxe

    Zufyxe New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2004
    Сообщения:
    137
    Адрес:
    Russia
    - как раз именно
    :

    использование NtQuerySystemInformation с классом 11 == SystemModuleInformation
     
  9. DarkK

    DarkK New Member

    Публикаций:
    0
    Регистрация:
    12 июн 2004
    Сообщения:
    9
    Адрес:
    Russia
    да, я давно подозревал, что не стоит доверять msdn-у в таких вещах...

    thnx, вроде то, что надо.
     
  10. DarkK

    DarkK New Member

    Публикаций:
    0
    Регистрация:
    12 июн 2004
    Сообщения:
    9
    Адрес:
    Russia
    аха, вот все бы хорошо, но что-то я опять туплю, видимо...

    вопщем, не то он мне отдает... совсем не те модули, которые мне интересны... драйвера как-то не актуальны, хотелось бы .dll-и узреть...

    а ntdll.dll я, конечно, найду так, но мне и про другие либы узнать бы....



    так что моя растерянность никуда не исчезла %(
     
  11. DarkK

    DarkK New Member

    Публикаций:
    0
    Регистрация:
    12 июн 2004
    Сообщения:
    9
    Адрес:
    Russia
    и тем больше мои сомнения в том, что это то, что мне надо, возросли, когда увидел я ansi строки... а как-то для 2k/XP странно и непривычно такое в отладчике увидеть...
     
  12. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    DarkK >




    Это похоже на какой-то флаг:
    Код (Text):
    1.  
    2.           //
    3.           // sort of a hack, but done to speed up GetModuleHandle. kernel32
    4.           // now does a two pass call here to avoid computing
    5.           // process dll path
    6.           //
    7.  
    8.  
    9.           if (LdrpCheckForLoadedDll( DllPath,
    10.                                      &ActualDllNameStr,
    11.                                      (BOOLEAN)(DllPath == (PWSTR)1 ? TRUE : FALSE),
    12.                                      Wx86KnownDll,
    13.                                      &LdrDataTableEntry
    14.                                    )
    15.              ) {
    16.               *DllHandle = (PVOID)LdrDataTableEntry->DllBase;
    17.               LdrpGetModuleHandleCache = LdrDataTableEntry;
    18.               st = STATUS_SUCCESS;
    19.  
    20.           }
    21. ___________________________________________________
    22.  
    23. BOOLEAN
    24. LdrpCheckForLoadedDll (
    25.     IN PWSTR DllPath OPTIONAL,
    26.     IN PUNICODE_STRING DllName,
    27.     IN BOOLEAN StaticLink,
    28.     IN BOOLEAN Wx86KnownDll,
    29.     OUT PLDR_DATA_TABLE_ENTRY *LdrDataTableEntry
    30.     )
    31.  
    32. /*++
    33.  
    34. Routine Description:
    35.  
    36.     This function scans the loader data table looking to see if
    37.     the specified DLL has already been mapped into the image. If
    38.     the dll has been loaded, the address of its data table entry
    39.     is returned.
    40.  
    41. Arguments:
    42.  
    43.     DllPath - Supplies an optional search path used to locate the DLL.
    44.  
    45.     DllName - Supplies the name to search for.
    46.  
    47.     StaticLink - TRUE if performing a static link.
    48.  
    49.     Wx86KnownDll - TRUE, treat Importer as x86
    50.  
    51.     LdrDataTableEntry - Returns the address of the loader data table
    52.         entry that describes the first dll section that implements the
    53.         dll.
    54.  
    55. Return Value:
    56.  
    57.     TRUE- The dll is already loaded.  The address of the data table
    58.         entries that implement the dll, and the number of data table
    59.         entries are returned.
    60.  
    61.     FALSE - The dll is not already mapped.
    62.  
    63. --*/






    volodya >




    Тащь начальник, я приобрёл книгу "Ядро Linux в комментариях"... с ней в комплекте, вместо изготовленного на заводе диска, мне дали самописную болванку, сославшись на утерю оригинала при транспортировке... :-(
     
  13. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    сославшись на утерю оригинала при транспортировке



    ага, ну так бы сразу и сказал - это все объясняет. Никаких более вопросов не имею :)