Momentálne ste offline a čaká sa, kým sa znova pripojíte na internet

INFO: Systém Windows Rundll a Rundll32 rozhranie

DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.

Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:164787
SUHRN
Microsoft Windows 95, Windows 98 a Windows Millennium Edition (Me) obsahuje dva programy pomôcku príkazového riadka s názvom Rundll.exe aRundll32.exe, ktorý umožní vyvolať funkciu vyvážané z knižnice DLL16-bitové alebo 32-bitový. Avšak Rundll a Rundll32 programy nespĺňajúumožňuje volať akékoľvek exportovaná funkcia z akéhokoľvek DLL. Napríklad, môžetenepoužívať tieto pomocné programy volať rozhranie API systému Win32 (uplatňovanieProgramovací Interface) hovory vyvezený z knižnice DLL systému. Programyiba umožňujú hovorové funkcie z knižnice DLL, ktoré výslovne zapisujú doako sa nazýva im. Tento článok poskytuje podrobnejšie informácie o používaní Rundlla Rundll32 programy pod operačnými systémami Windows uvedených vyššie.

MIcrosoft Windows NT 4.0, Windows 2000 a Windows XP loď s len Rundll32. Neexistuje žiadna podpora pre Rundll (Win16 utility) na buď platforme.

Rundll a Rundll32 pomocné programy boli pôvodne navrhnuté len preinterné použitie v spoločnosti Microsoft. Ale ich funkčnosť jedostatočne všeobecné, teraz sú k dispozícii na všeobecné použitie.Všimnite si, že systém Windows NT 4.0 lodí len s Rundll32 obslužný program apodporuje iba Rundll32.
DALSIE INFORMACIE

Rundll vs Rundll32

Rundll načítava a spúšťa 16-bitové dll, keďže Rundll32 načítava a spúšťa 32-bitovéDLL. Ak ste prejsť nesprávny typ DLL Rundll alebo Rundll32, môženepodarí spustiť bez uvedenia chybové hlásenia.

Rundll príkazového riadka

Príkazový riadok pre Rundll je nasledovná:
   RUNDLL.EXE <dllname>,<entrypoint> <optional arguments>				
Príkladom je takto:
   RUNDLL.EXE SETUPX.DLL,InstallHinfSection 132 C:\WINDOWS\INF\SHELL.INF				
Existujú 3 otázky, aby dôkladne zvážili vyššie príkazového riadka:
  1. Rundll alebo Rundll32 vyhľadávania pre daný názov súboru DLL v štandardných miestach (pozrite dokumentáciu pre funkciu LoadLibrary() pre podrobnosti). Odporúča sa, aby ste poskytli úplná cesta knižnice DLL zabezpečiť, že sa zistí ten správny. Najlepšie výsledky, použite skrátený názov súboru namiesto dlhé meno súboru zabezpečiť, že žiadne nepovolené znaky sa zobrazia. Všimnite si najmä, že to znamená DLL v priečinku "C:\Program Files" by sa mal prepočítať na jeho skrátený názov.
  2. <dllname>Nesmú obsahovať akékoľvek medzery alebo čiarky alebo úvodzovky. Toto je obmedzenie v príkazovom riadku analyzátor Rundll.</dllname>
  3. Vyššie príkazového riadka, nesmierne dôležitá je čiarka (,) medzi <dllname>a názov funkcie <entrypont>. Ak chýba čiarka oddeľovač Rundll alebo Rundll32 zlyhá bez uvedenia akýchkoľvek chýb. Okrem toho nemôže existovať žiadne biele medzery medzi <dllname>, čiarka, a <entrypoint>funkciu.</entrypoint> </dllname> </entrypont> </dllname>

Ako funguje Rundll

Rundll vykonáva nasledujúce kroky:
  1. Analyzuje príkazového riadka.
  2. Načíta zadanej knižnici DLL cez LoadLibrary().
  3. Získava adresu a <entrypoint>funkciu cez funkcia GetProcAddress().</entrypoint>
  4. Je volanie <entrypoint>funkcie, prechádzajúcou chvost príkazového riadka, ktorý je <optional arguments="">.</optional> </entrypoint>
  5. Keď funkcia <entrypoint>vráti, Rundll.exe unloads knižnicu DLL a výstupy.</entrypoint>

Ako napísať vaše DLL

Vaše DLL, zapíšte <entrypoint>funkcia s nasledujúce prototyp:</entrypoint>

16-bitové knižnice DLL:

  void FAR PASCAL __loadds  EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);				
32-bit DLL:
  void CALLBACK  EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);				
Opäť, existujú 3 otázky zvážiť s funkciou EntryPoint:
  1. Je zrejmé, názov "EntryPoint" by mal byť nahradený skutočné meno funkciu vstupného bodu. Poznámka, že uvedenie Rundll32 bod je úplne nesúvisiacich DllEntryPoint funkcie v 32-bit DLL, ktoré rukoväte procesu a vlákno pripojiť/odpojiť oznámenia.
  2. Funkciu vstupného bodu pre Rundll32 musia byť definované s _stdcall volacej konvencie (spätné volanie predvolené pomocou _stdcall atribút). Ak atribút _stdcall chýba, potom funkcia predvolené _cdecl volacej konvencie a potom Rundll32 abnormálne ukončiť po volaní funkcie.
  3. Pretože funkcia musí vyhlásiť s _stdcall volacej konvencie, ako je popísané vyššie, vyplýva, že Visual c ++ kompilátor bude skutočne exportovať ho ako _EntryPoint@16 ak DLL je napísaný v c alebo bude používať ďalšie meno dekorácie ak DLL je napísané v C++. Takže buďte opatrní používať správne exportuje názov v príkazovom riadku pre Rundll alebo Rundll32. Ak chcete vyhnúť použitie zdobená názvy, použiť súbor .def a vývozných funkciu vstupného bodu podľa názvu. Pozrite si dokumentáciu produktu a článok o ďalšie informácie o názov dekorácie pri použití kompilátorov jazyka Visual C++:
    140485Vyvážajúci PASCAL-rovnako ako symboly v 32-bit DLL
Parametre, ktoré Rundll vstupný bod sú nasledovné:
   hwnd - window handle that should be used as the owner window for          any windows your DLL creates   hinst - your DLL's instance handle   lpszCmdLine - ASCIIZ command line your DLL should parse   nCmdShow - describes how your DLL's windows should be displayed				
V nasledujúcom príklade:
     RUNDLL.EXE SETUPX.DLL,InstallHinfSection 132 C:\WINDOWS\INF\SHELL.INF				
Rundll by volať funkciu InstallHinfSection() entrypointSúboru SetupX.dll a preniesť ho nasledujúce parametre:
   hwnd = (parent window handle)   hinst = HINSTANCE of SETUPX.DLL   lpszCmdLine = "132 C:\WINDOWS\INF\SHELL.INF"   nCmdShow = (whatever the nCmdShow was passed to CreateProcess)				
Všimnite si, že je funkcia <entrypoint>(alebo InstallHinfSection() vnad príkladom), ktorý má analyzovať svoju vlastnú príkazového riadka (lpszCmdLineParameter vyššie) a používať jednotlivé parametre podľa potreby.Rundll.exe analyzuje iba do voliteľné argumenty prešla na jeho príkazriadok. Zvyšok parsování je na funkciu <entrypoint>.</entrypoint></entrypoint>

Osobitné poznámky o rozdieloch medzi Windows 95 A Windows NT

Pre systém Windows NT, Windows 2000 a Windows XP správanie Rundll32.exe je trochu iný, aby to vyhovovalo UNICODE príkazové riadky.

Windows NT najprv pokúsi GetProcAddress pre <entrypoint>W. Ak je táto vstupný bod, potom prototyp predpokladá sa:</entrypoint>
   void CALLBACK   EntryPointW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine,               int nCmdShow);				
To je rovnaké ako ANSI EntryPoint, okrem prípadov, keď lpszCmdLineparameter je teraz reťazec UNICODE.

Ak bod <entrypoint>w vstupu sa nenašiel, potom systém Windows NT budeGetProcAddress pre <entrypoint>a a pre <entrypoint>. Ak sa o nich zistí,potom sa považuje za ANSI vstupného bodu a sa zaobchádza rovnakým spôsobom akoSystém Windows 95, 98 a Me. Preto, ak chcete, aby vaše DLL spustiť v systéme Windows 95 s podporou ANSI a na systém Windows NT/2000/XP s podpora UNICODE, by ste exportovať dve funkcie: EntryPointW a EntryPoint. Na Windows NT/2000/Me, EntryPointW funkcie sa bude nazývať UNICODE v príkazovom riadku; na Windows 95/98/Me, EntryPoint funkcie sa bude nazývať ANSI príkazového riadka.</entrypoint></entrypoint></entrypoint>
Win95 nástroje

Upozornenie: Tento článok bol preložený automaticky.

Vlastnosti

ID článku: 164787 – Posledná kontrola: 10/17/2011 10:20:00 – Revízia: 2.0

Microsoft Win32 Application Programming Interface

  • kbdll kbFAQ kbinfo kbkernbase kbprogramming kbusage kbmt KB164787 KbMtsk
Pripomienky