Thông tin: Windows Rundll và giao di?n Rundll32

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 164787 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang này

TÓM T?T

Microsoft Windows 95, Windows 98 và Windows Millennium Edition (Me) ch?a hai chương tr?nh ti?n ích d?ng l?nh đ?t tên là Rundll.exe và RunDll32.exe cho phép b?n g?i m?t ch?c năng xu?t kh?u t? m?t DLL, 16-bit ho?c 32-bit. Tuy nhiên, các chương tr?nh Rundll và Rundll32 th? không cho phép b?n g?i b?t k? ch?c năng đ? xu?t chuy?n t? b?t k? DLL. Ví d?, b?n có th? không s? d?ng các chương tr?nh ti?n ích đ? g?i Win32 API (?ng d?ng Giao di?n l?p tr?nh) các cu?c g?i xu?t kh?u t? h? th?ng DLLs. Các chương tr?nh ch? cho phép b?n g?i ch?c năng t? m?t DLL r? ràng b?ng văn b?n đ? đư?c g?i là c?a h?. Bài vi?t này cung c?p thêm chi ti?t v? vi?c s? d?ng c?a Rundll và các chương tr?nh Rundll32 dư?i h? đi?u hành Windows li?t kê ? trên.

MIcrosoft Windows NT 4.0, Windows 2000 và Windows XP tàu v?i ch? Rundll32. Không có không có h? tr? cho Rundll (ti?n ích Win16) trên c? hai n?n t?ng.

Các chương tr?nh ti?n ích Rundll và Rundll32 đư?c thi?t k? ch? cho s? d?ng n?i b? t?i Microsoft. Nhưng các ch?c năng đư?c cung c?p b?i chúng là đ? chung và r?ng h? đang có s?n đ? s? d?ng chung. Lưu ? r?ng Windows NT 4.0 tàu ch? v?i chương tr?nh ti?n ích Rundll32 và h? tr? ch? Rundll32.

THÔNG TIN THÊM

Rundll vs. Rundll32

Rundll t?i và ch?y 16-bit DLLs, trong khi Rundll32 t?i và ch?y 32-bit Dll. N?u b?n vư?t qua lo?i sai c?a DLL Rundll ho?c Rundll32, nó có th? không ch?y mà không c?n ch? ra b?t k? thông báo l?i.

D?ng l?nh rundll

D?ng l?nh cho Rundll là như sau:
   RUNDLL.EXE <dllname>,<entrypoint> <optional arguments>
				
M?t ví d? là như sau:
   RUNDLL.EXE SETUPX.DLL,InstallHinfSection 132 C:\WINDOWS\INF\SHELL.INF
				
Có 3 v?n đ? c?n xem xét c?n th?n ? trên d?ng l?nh:
  1. Rundll ho?c Rundll32 t?m ki?m cho tên t?p tin DLL nh?t đ?nh ? nh?ng nơi tiêu chu?n (xem tài li?u hư?ng d?n cho các ch?c năng LoadLibrary() đ? bi?t chi ti?t). Khuyên r?ng b?n cung c?p m?t đư?ng d?n đ?y đ? đ? DLL đ? đ?m b?o r?ng đúng đư?c t?m th?y. Cho k?t qu? t?t nh?t, dùng tên t?p ng?n thay v? c?a tên t?p tin dài đ? đ?m b?o r?ng không có nhân v?t b?t h?p pháp s? xu?t hi?n. Lưu ? đ?c bi?t r?ng đi?u này có ngh?a là m?t DLL trong thư m?c "C: Program Files" nên đư?c chuy?n đ?i sang tên ng?n c?a nó.
  2. <dllname> Có th? không ch?a b?t k? d?u cách ho?c d?u ph?y ho?c d?u ngo?c kép. Đây là m?t gi?i h?n trong Rundll d?ng l?nh parser.</dllname>
  3. ? trên d?ng l?nh, d?u ph?y (,) gi?a <dllname> và <entrypont> ch?c năng tên là vô cùng quan tr?ng. N?u phân cách b?ng d?u ph?y là m?t tích, Rundll ho?c Rundll32 s? không thành công mà không ch? ra b?t k? l?i nào. Ngoài ra, không th? có b?t k? không gian tr?ng ? gi?a <dllname>, d?u ph?y, và <entrypoint> ch?c năng.</entrypoint></dllname></entrypont></dllname>

Cách th?c ho?t đ?ng Rundll

Rundll th?c hi?n theo các bư?c sau:
  1. Nó phân tích d?ng l?nh.
  2. Nó t?i DLL đ? ch? đ?nh thông qua LoadLibrary().
  3. Nó l?y đư?c đ?a ch? c?a <entrypoint> ch?c năng thông qua GetProcAddress().</entrypoint>
  4. Nó g?i <entrypoint> hàm, đi qua đuôi d?ng l?nh là <optional arguments="">.</optional></entrypoint>
  5. Khi tr? v? ch?c năng <entrypoint> , Rundll.exe unloads DLL và thoat. </entrypoint>

Làm th? nào đ? vi?t DLL c?a b?n

Trong DLL c?a b?n, vi?t các ch?c năng <entrypoint> v?i chi?c nguyên m?u sau: </entrypoint>

16-bit 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);
				
M?t l?n n?a, có 3 v?n đ? c?n xem xét v?i ch?c năng EntryPoint:
  1. R? ràng, tên "entrypoint" nên đư?c thay th? b?ng tên c?a b?n đi?m nh?p hàm, th?c t?. Lưu ? r?ng m?c nh?p c?a Rundll32 ch? là hoàn toàn không liên quan đ?n ch?c năng DllEntryPoint trong m?t DLL 32-bit mà quá tr?nh x? l? và s?i đính kèm/tách thông báo.
  2. Đi?m nh?p hàm cho Rundll32 ph?i đư?c xác đ?nh v?i _stdcall g?i h?i ngh? (g?i l?i m?c đ?nh b?ng cách s? d?ng các thu?c tính _stdcall). N?u các thu?c tính _stdcall là m?t tích, sau đó ch?c năng m?c đ?nh đ? _cdecl g?i h?i ngh? và sau đó Rundll32 s? ch?m d?t b?t thư?ng sau khi g?i ch?c năng.
  3. K? t? khi b?n ph?i khai báo ch?c năng v?i _stdcall g?i h?i ngh? như mô t? ? trên, nó sau Visual C++ compiler s? th?c s? xu?t nó như _EntryPoint@16 n?u DLL đư?c vi?t b?ng c ho?c s? s? d?ng thêm tên trang trí n?u DLL đư?c vi?t b?ng C++. V? v?y, h?y c?n th?n đ? s? d?ng tên chính xác đ? xu?t chuy?n trong d?ng l?nh Rundll ho?c Rundll32. N?u b?n mu?n tránh s? d?ng trang trí tên, s? d?ng m?t t?p tin .def và xu?t kh?u đi?m nh?p hàm theo tên. Xin tham kh?o tài li?u s?n ph?m và bài vi?t sau đây đ? bi?t thêm thông tin v? tên trang trí khi s? d?ng Visual C++ tr?nh biên d?ch:
    140485Xu?t kh?u PASCAL gi?ng như các bi?u tư?ng trong 32-bit DLLs
Các tham s? đ? Rundll đi?m là như sau:
   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
				
Trong ví d? sau:
     RUNDLL.EXE SETUPX.DLL,InstallHinfSection 132 C:\WINDOWS\INF\SHELL.INF
				
Rundll s? g?i hàm entrypoint InstallHinfSection() Setupx.dll và vư?t qua nó các thông s? sau đây:
   hwnd = (parent window handle)
   hinst = HINSTANCE of SETUPX.DLL
   lpszCmdLine = "132 C:\WINDOWS\INF\SHELL.INF"
   nCmdShow = (whatever the nCmdShow was passed to CreateProcess)
				
Ghi chú r?ng ch?c năng <entrypoint> (ho?c InstallHinfSection() trong các ? trên ví d?) mà đ? phân tích c?a riêng m?nh d?ng l?nh (lpszCmdLine tham s? ? trên) và s? d?ng các tham s? cá nhân khi c?n thi?t. Rundll.exe phân tích ch? lên đ?n các đ?i s? tùy ch?n thông qua đ? l?nh c?a nó d?ng. Ph?n c?n l?i c?a các phân tích là lên đ?n ch?c năng <entrypoint> . </entrypoint></entrypoint>

Ghi chú đ?c bi?t v? s? khác bi?t gi?a Windows 95 và Windows NT

Trên Windows NT, Windows 2000 và Windows XP hành vi c?a Rundll32.exe là hơi khác nhau, đ? ch?a UNICODE command lines.

Windows NT đ?u tiên c? g?ng GetProcAddress cho <entrypoint>W. N?u th?i đi?m nh?p c?nh này đư?c t?m th?y, sau đó, chi?c nguyên m?u đư?c gi? đ?nh là: </entrypoint>
   void CALLBACK
   EntryPointW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine,
               int nCmdShow);
				
Đi?u này là tương t? như EntryPoint ANSI, ngo?i tr? r?ng lpszCmdLine tham s? bây gi? là m?t chu?i UNICODE.

N?u đi?m <entrypoint>w m?c nh?p không đư?c t?m th?y, sau đó Windows NT s? GetProcAddress <entrypoint>a và cho <entrypoint>. N?u m?t trong hai loài này, sau đó nó đư?c coi là m?t đi?m nh?p c?nh ANSI và đư?c x? l? theo cách tương t? như Windows 95/98/Me. V? v?y, n?u b?n mu?n c?a b?n DLL đ? ch?y trên Windows 95 v?i ANSI h? tr? và trên Windows NT/2000/XP v?i h? tr? UNICODE, b?n nên xu?t hai ch?c năng: EntryPointW và EntryPoint. Trên Windows NT/2000/Me, ch?c năng EntryPointW s? đư?c g?i là v?i m?t d?ng l?nh UNICODE; trên Windows 95/98/Me, ch?c năng EntryPoint s? đư?c g?i là v?i m?t d?ng ANSI l?nh. </entrypoint></entrypoint></entrypoint>

Thu?c tính

ID c?a bài: 164787 - L?n xem xét sau cùng: 19 Tháng Tám 2011 - Xem xét l?i: 2.0
Áp d?ng
  • Microsoft Win32 Application Programming Interface, khi đư?c dùng v?i:
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
T? khóa: 
kbdll kbFAQ kbinfo kbkernbase kbprogramming kbusage kbmt KB164787 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:164787

Cung cấp Phản hồi

 

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