INFO: Windows Rundll dan Rundll32 antarmuka

PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.

Klik disini untuk melihat versi Inggris dari artikel ini:164787
RINGKASAN
Microsoft Windows 95, Windows 98, dan Windows Millennium Edition (Me) berisi dua program utilitas baris perintah bernama Rundll.exe danRundll32.exe yang memungkinkan Anda untuk memanggil fungsi yang diekspor dari DLL,16-bit atau 32-bit. Namun, program-program Rundll dan Rundll32 tidakmemungkinkan Anda untuk panggilan fungsi apapun diekspor dari setiap DLL. Sebagai contoh, Anda dapattidak menggunakan program utilitas ini untuk memanggil Win32 API (ApplicationPanggilan antarmuka pemrograman) diekspor dari sistem dll. Programhanya memungkinkan Anda untuk panggilan fungsi dari DLL yang secara eksplisit ditulis untukdipanggil oleh mereka. Artikel ini memberikan rincian lebih lanjut tentang penggunaan Rundlldan Rundll32 program di bawah sistem operasi Windows yang tercantum di atas.

MIcrosoft Windows NT 4.0, Windows 2000 dan Windows XP kapal dengan hanya Rundll32. Ada tidak ada dukungan untuk Rundll (Win16 utilitas) pada platform baik.

Program utilitas Rundll dan Rundll32 pada awalnya dirancang hanya untukpenggunaan internal di Microsoft. Tetapi fungsi yang disediakan oleh merekacukup generik bahwa mereka sekarang tersedia untuk penggunaan umum.Perhatikan bahwa Windows NT 4.0 kapal hanya dengan Rundll32 utility program danmendukung hanya Rundll32.
INFORMASI LEBIH LANJUT

Rundll vs Rundll32

Rundll beban dan berjalan 16-bit dll, sedangkan Rundll32 beban dan berjalan 32-bitDll. Jika Anda melewatkan salah jenis DLL Rundll atau Rundll32, mungkingagal untuk menjalankan tanpa menunjukkan pesan kesalahan.

Baris perintah Rundll

Baris perintah untuk Rundll adalah sebagai berikut:
   RUNDLL.EXE <dllname>,<entrypoint> <optional arguments>				
Contohnya adalah sebagai berikut:
   RUNDLL.EXE SETUPX.DLL,InstallHinfSection 132 C:\WINDOWS\INF\SHELL.INF				
Ada 3 masalah untuk mempertimbangkan dengan hati-hati di baris perintah di atas:
  1. Rundll atau Rundll32 mencari nama-file DLL yang diberikan di tempat-tempat standar (lihat dokumentasi untuk fungsi LoadLibrary() untuk rincian). Dianjurkan bahwa Anda berikan path lengkap untuk DLL untuk memastikan bahwa benar ditemukan. Untuk hasil terbaik, menggunakan nama file pendek bukan nama file yang panjang untuk memastikan bahwa tidak ada karakter ilegal akan muncul. Catatan khususnya bahwa ini berarti DLL dalam folder "C: Program Files" harus diubah namanya pendek.
  2. <dllname>Mungkin tidak berisi spasi atau koma atau tanda kutip. Ini adalah pembatasan dalam parser baris perintah Rundll.</dllname>
  3. Dalam baris perintah di atas, koma (,) antara <dllname>dan nama fungsi <entrypont>sangat penting. Jika koma pemisah hilang, Rundll atau Rundll32 akan gagal tanpa menunjukkan kesalahan. Selain itu, tidak ada spasi putih di antara <dllname>, koma, dan <entrypoint>fungsi.</entrypoint> </dllname> </entrypont> </dllname>

Bagaimana Rundll bekerja

Rundll melakukan langkah-langkah berikut:
  1. Ini menggunakan baris perintah.
  2. Beban DLL ditentukan melalui LoadLibrary().
  3. Memperoleh alamat <entrypoint>fungsi melalui GetProcAddress().</entrypoint>
  4. It panggilan <entrypoint>fungsi, melewati ekor baris perintah yang merupakan <optional arguments="">.</optional> </entrypoint>
  5. Ketika kembali fungsi <entrypoint>, Rundll.exe unloads DLL dan keluar.</entrypoint>

Bagaimana menulis Anda DLL

Dalam DLL, menulis fungsi <entrypoint>dengan prototipe berikut:</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);				
Sekali lagi, ada isu-isu 3 untuk mempertimbangkan dengan fungsi meluas:
  1. Jelas, nama "Meluas" harus diganti dengan nama sebenarnya dari fungsi titik entri Anda. Catatan Rundll32 catatan titik itu benar-benar tidak berhubungan fungsi DllEntryPoint dalam DLL 32-bit yang menangani proses dan benang attach/detach pemberitahuan.
  2. Fungsi titik entri untuk Rundll32 harus didefinisikan dengan _stdcall memanggil Konvensi (CALLBACK default untuk menggunakan atribut _stdcall). Jika atribut _stdcall hilang, maka fungsi default untuk _cdecl memanggil Konvensi dan kemudian Rundll32 akan mengakhiri normal setelah memanggil fungsi.
  3. Karena Anda harus menyatakan fungsi dengan _stdcall memanggil Konvensi seperti yang dijelaskan di atas, maka Visual C++ compiler akan benar-benar ekspor sebagai _EntryPoint@16 jika DLL ditulis dalam c atau akan menggunakan lebih lanjut nama dekorasi ini, jika DLL ditulis dalam c + +. Jadi, berhati-hati untuk menggunakan nama dengan benar diekspor di baris perintah untuk Rundll atau Rundll32. Jika Anda ingin menghindari menggunakan dihiasi nama, menggunakan .def file dan ekspor fungsi titik masuk dengan nama. Lihat dokumentasi produk dan artikel berikut untuk informasi lebih lanjut tentang nama dekorasi ketika menggunakan Visual C++ compiler:
    140485Mengekspor PASCAL-seperti simbol di 32-bit dll
Parameter untuk Rundll entry point adalah sebagai berikut:
   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				
Dalam contoh berikut:
     RUNDLL.EXE SETUPX.DLL,InstallHinfSection 132 C:\WINDOWS\INF\SHELL.INF				
Rundll akan memanggil fungsi meluas InstallHinfSection()Setupx.dll dan melewati parameter berikut:
   hwnd = (parent window handle)   hinst = HINSTANCE of SETUPX.DLL   lpszCmdLine = "132 C:\WINDOWS\INF\SHELL.INF"   nCmdShow = (whatever the nCmdShow was passed to CreateProcess)				
Perhatikan bahwa ini adalah fungsi <entrypoint>(atau InstallHinfSection() dalamdi atas contoh) yang telah untuk mengurai sendiri baris perintah (lpszCmdLineparameter di atas) dan menggunakan parameter individu yang diperlukan.Rundll.exe mem-parsing hanya untuk argumen opsional berlalu untuk perintah yangbaris. Sisa yang parsing terserah <entrypoint>fungsi.</entrypoint></entrypoint>

Catatan khusus tentang perbedaan antara Windows 95 dan Windows NT

Pada Windows NT, Windows 2000 dan Windows XP perilaku Rundll32.exe sedikit berbeda, untuk mengakomodasi UNICODE baris perintah.

Windows NT pertama kali mencoba untuk GetProcAddress untuk <entrypoint>W. Jika titik entri ini ditemukan, kemudian prototipe diasumsikan:</entrypoint>
   void CALLBACK   EntryPointW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine,               int nCmdShow);				
Ini adalah sama dengan meluas ANSI, kecuali bahwa lpszCmdLineparameter sekarang adalah UNICODE string.

Jika titik <entrypoint>w entri tidak ditemukan, maka Windows NT akanGetProcAddress untuk <entrypoint>dan <entrypoint>. Jika baik ditemukan,kemudian dianggap ANSI entry point dan diperlakukan dengan cara yang sama sebagaiWindows 95/98/Me. Oleh karena itu, jika Anda ingin Anda DLL untuk berjalan pada Windows 95 dengan ANSI dukungan dan pada Windows NT/2000/XP dengan dukungan UNICODE, Anda harus mengekspor dua fungsi: EntryPointW dan meluas. Pada Windows NT/2000/Me, EntryPointW fungsi akan dipanggil dengan baris perintah UNICODE; pada Windows 95/98/Me, meluas fungsi akan dipanggil dengan baris perintah ANSI.</entrypoint></entrypoint></entrypoint>
win95 alat

Peringatan: Artikel ini telah diterjemahkan secara otomatis

Properti

ID Artikel: 164787 - Tinjauan Terakhir: 09/15/2011 09:10:00 - Revisi: 2.0

Microsoft Win32 Application Programming Interface

  • kbdll kbFAQ kbinfo kbkernbase kbprogramming kbusage kbmt KB164787 KbMtid
Tanggapan