INFORMACE: Windows Rundll a Rundll32 rozhraní

Překlady článku Překlady článku
ID článku: 164787 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Microsoft Windows 95, Windows 98 a Windows Millennium Edition (ME) obsahuje dva programy nástroj příkazového řádku s názvem Rundll.exe andRundll32.exe, které umožňují vyvolání funkce exportovány z knihovny DLL, 16-bit nebo 32-bit. To však udělat programy Rundll a Rundll32 notallow můžete volat všechny exportované funkce z libovolné knihovny DLL. Například nelze použít tyto nástroje programy volat exportované z systémové knihovny DLL volání rozhraní Win32 API (rozhraní ApplicationProgramming). Programsonly umožňují volat funkce z knihovny DLL, která explicitně zapsány tobe je volána. Tento článek uvádí, že výše uvedené podrobnosti o použití Rundlland Rundll32 programů v operačním systému Windows.

MIcrosoft Windows NT 4.0, Windows 2000 a Windows XP jsou dodávány s pouze Rundll32. Není poskytována žádná podpora pro Rundll (Win16 nástroj) na obou platformách.

Nástroj Rundll a Rundll32 programy byly původně určeny pouze použití forinternal společnosti Microsoft. Ale funkce poskytované těmito issufficiently obecný, že jsou nyní k dispozici pro obecné použití.Všimněte si, že systém Windows NT 4.0 se dodává pouze s andsupports program nástroje Rundll32 pouze Rundll32.

Další informace

Rundll vs. Rundll32

Rundll načte a spustí 16bitové DLL, že Rundll32 načítá a spouští 32 bitDLLs. Pokud předáte nesprávný typ knihovny DLL Rundll nebo Rundll32, jej mayfail spouštět bez jakékoli chybové zprávy označující.

Rundll příkazového řádku

Pro Rundll příkazového řádku je následující:
   RUNDLL.EXE <dllname>,<entrypoint> <optional arguments>
				
Příklad vypadá takto:
   RUNDLL.EXE SETUPX.DLL,InstallHinfSection 132 C:\WINDOWS\INF\SHELL.INF
				
Existují 3 problémy pečlivě zvážit, do výše uvedeného příkazového řádku:
  1. Rundll nebo Rundll32 vyhledávání pro daný název souboru DLL na standardní místa (viz dokumentace pro funkce LoadLibrary() podrobnosti). Je vhodné zadat úplnou cestu ke knihovně DLL, aby bylo zajištěno, že je najít ten správný. Nejlepších výsledků dosáhnete použijte místo dlouhý název souboru zajistit, že žádné nepovolené znaky se zobrazí krátké názvy souborů. Všimněte si zejména, to znamená, že knihovna DLL ve složce "C:\Program Files" by měla být převedena na krátký název.
  2. <dllname>Nesmí obsahovat mezery nebo čárky nebo uvozovky. Jedná se o omezení v Rundll příkazového řádku Analyzátor.</dllname>
  3. V příkazovém řádku nad čárkou (,) mezi název funkce <entrypont>a <dllname>je velice důležité. Pokud chybí oddělovač čárka, Rundll nebo Rundll32 nezdaří bez označující všechny chyby. Kromě toho nemůže být žádné mezery mezi <dllname>, čárka a <entrypoint>funkce.</entrypoint> </dllname> </dllname></entrypont>

Princip Rundll

Rundll provede následující kroky:
  1. Analyzuje příkazového řádku.
  2. Načte zadaný DLL prostřednictvím LoadLibrary().
  3. Získá adresu <entrypoint>funkce prostřednictvím volání GetProcAddress().</entrypoint>
  4. Volá <entrypoint>funkci, předáním příkazového řádku ocas, což je <optional arguments="">.</optional> </entrypoint>
  5. Když <entrypoint>Funkce vrátí, Rundll.exe uvolní knihovna DLL a východů.</entrypoint>

Jak psát Vaše knihovna DLL

V knihovně DLL, napište <entrypoint>funkce s následující prototyp:</entrypoint>

16bitová knihovna DLL:

  void FAR PASCAL __loadds
  EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
				
32bitová knihovna DLL:
  void CALLBACK
  EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
				
Opět existují 3 problémy s funkcí EntryPoint zvážit:
  1. Samozřejmě by měl název "EntryPoint" nahrazen skutečným názvem své funkci vstupního bodu. Všimněte si, že Rundll32 vstupní bod zcela nesouvisí s DllEntryPoint funkce v knihovně DLL 32-bit, který zpracovává procesů a podprocesů připojit/odpojit oznámení.
  2. Funkci vstupního bodu pro Rundll32 musí být definována s _stdcall (zpětného volání používá ve výchozím nastavení je atribut _stdcall) konvence volání. Pokud chybí atribut _stdcall, _cdecl konvence volání funkce jako výchozí a potom bude Rundll32 ukončen neobvykle po volání funkce.
  3. Vzhledem k tomu, že je třeba deklarovat funkci s _stdcall konvence volání, jak je popsáno výše, vyplývá, že kompilátor Visual C++ bude skutečně ji exportovat jako _EntryPoint@16 Pokud je knihovna DLL napsané v jazyce C nebo použije další úprava názvu pokud DLL je napsán v jazyce C++. Dbejte proto správně exportovaný název použijte v příkazovém řádku pro Rundll nebo Rundll32. Pokud chcete vyhnout použití dekorované názvy, použijte soubor .def a exportovat funkci vstupního bodu podle názvu. Naleznete v dokumentaci k produktu a další informace o názvu dekorace v následujícím článku při použití kompilátoru Visual C++:
    140485Exportování symbolů podobných PASCAL v 32bitové knihovny DLL
Parametry vstupní bod Rundll jsou následující:
   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 následujícím příkladu:
     RUNDLL.EXE SETUPX.DLL,InstallHinfSection 132 C:\WINDOWS\INF\SHELL.INF
				
Rundll bude volat inSetupx.dll InstallHinfSection() vstupní bod funkce a předejte jí následující parametry:
   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šimněte si, že je funkce <entrypoint>(nebo InstallHinfSection() v příkladu theabove), který má analyzovat své vlastní příkazového řádku (nad lpszCmdLineparameter) a použití jednotlivých parametrů podle potřeby.Rundll.exe analyzuje pouze do volitelné argumenty předané do jeho commandline. Zbytek analýzu je až <entrypoint>funkce.</entrypoint> </entrypoint>

Zvláštní poznámky o rozdílech mezi systémy Windows 95 a Windows NT

V systému Windows NT, Windows 2000 a Windows XP chování Rundll32.exe se mírně liší, za účelem zohlednění UNICODE příkazové řádky.

Windows NT se nejprve pokusí GetProcAddress pro <EntryPoint>W. Pokud je nalezen tohoto vstupního bodu, pak prototypu, který je považován:</EntryPoint>
   void CALLBACK
   EntryPointW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine,
               int nCmdShow);
				
To je stejné jako ANSI EntryPoint, s tím rozdílem, že lpszCmdLineparameter je řetězec UNICODE.

Pokud <EntryPoint>W vstupní bod nebyl nalezen, pak Windows NT willGetProcAddress <entrypoint>A a <entrypoint>. Pokud jsou pak je považována za vstupní bod ANSI a je zacházeno stejným způsobem jako asWindows 95/98/ME Proto, pokud chcete, aby vaše knihovna DLL pro spuštění v systému Windows 95 s podporou standardu ANSI a v systému Windows NT/2000/XP s podporou kódování UNICODE, je třeba exportovat dvě funkce: EntryPointW a vstupní bod. V systému Windows NT/2000/Me bude volána funkce EntryPointW s UNICODE příkazového řádku; na Windows 95/98/Me, bude volána funkce EntryPoint ANSI příkazového řádku.</entrypoint> </entrypoint> </EntryPoint>

Vlastnosti

ID článku: 164787 - Poslední aktualizace: 4. dubna 2014 - Revize: 8.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Win32 Application Programming Interface na těchto platformách
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
Klíčová slova: 
kbdll kbfaq kbinfo kbkernbase kbprogramming kbusage kbmt KB164787 KbMtcs
Strojově přeložený článek
DŮLEŽITÉ: Tento článek je přeložen pomocí softwaru na strojový překlad Microsoft. Nepřesný či chybný překlad lze opravit prostřednictvím technologie Community Translation Framework (CTF). Microsoft nabízí strojově přeložené, komunitou dodatečně upravované články, a články přeložené lidmi s cílem zajistit přístup ke všem článkům v naší znalostní bázi ve více jazycích. Strojově přeložené a dodatečně upravované články mohou obsahovat chyby ve slovníku, syntaxi a gramatice. Společnost Microsoft není odpovědná za jakékoliv nepřesnosti, chyby nebo škody způsobené nesprávným překladem obsahu nebo jeho použitím našimi zákazníky. Více o CTF naleznete na http://support.microsoft.com/gp/machine-translation-corrections/cs.
Projděte si také anglickou verzi článku: 164787

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com