أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

INFO: Rundll Windows وواجهة Rundll32

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية164787
الموجز
نظام التشغيل Microsoft Windows 95 و Windows 98 و Windows Millennium Edition (Me) يحتوي على الأداة المساعدة لسطر الأوامر برنامجين المسمى Rundll.exe و Rundll32.exe التي تسمح لك استدعاء دالة تم تصديرها من DLL 16 بت أو 32-بت. ومع ذلك، لا على Rundll وبرامج Rundll32 تسمح إمكانية استدعاء أية دالة تم تصديرها من أية DLL. على سبيل المثال، لا يمكنك استخدام هذه البرامج الأداة المساعدة للاتصال استدعاءات Win32 API (واجهة برمجة تطبيقات) تصديرها من النظام DLLs. السماح البرامج فقط استدعاء الدالات من DLL التي تتم كتابتها بشكل صريح ليتم استدعاؤها بواسطة عليها. توفر هذه المقالة المزيد من التفاصيل على استخدام Rundll وبرامج Rundll32 تحت أنظمة تشغيل Windows المسرودة أعلاه.

Microsoft Windows NT 4.0 و Windows 2000 و Windows XP المحملة مع Rundll32 فقط. لا يوجد أي دعم لـ Rundll (الأداة المساعدة Win16) على النظام الأساسي إما.

تم تصميم برامج الأداة المساعدة Rundll Rundll32 الأصل فقط للاستخدام الداخلي في Microsoft. ولكن الوظيفة الموفرة من قبل هذه بشكل كاف من عام عن توفرها الآن للاستخدام العام. لاحظ أن Windows NT 4.0 المتوفر فقط مع برنامج أداة مساعدة Rundll32 يدعم Rundll32 فقط.
معلومات أخرى

Rundll مقابل Rundll32

Rundll تحميل وتشغيل DLLs 16-بت بينما Rundll32 بتحميل ويعمل DLLs 32-بت. إذا قمت بتمرير نوع خاطئ من DLL Rundll أو Rundll32 قد تفشل لتشغيل بدون تشير إلى أي رسائل خطأ.

سطر الأوامر Rundll

سطر الأوامر Rundll كما يلي:
   RUNDLL.EXE <dllname>,<entrypoint> <optional arguments>				
مثال كما يلي:
   RUNDLL.EXE SETUPX.DLL,InstallHinfSection 132 C:\WINDOWS\INF\SHELL.INF				
توجد مشاكل 3 الاعتبار بعناية في سطر الأوامر أعلاه:
  1. Rundll أو Rundll32 ابحث عن اسم ملف DLL المعطى في أماكن القياسية (انظر وثائق الدالة LoadLibrary() للحصول على التفاصيل). من المستحسن توفير مسار كامل إلى DLL للتأكد من العثور على الصحيح. للحصول على أفضل النتائج، استخدم اسم ملف قصير بدلاً من اسم ملف طويل للتأكد من ظهور أي الأحرف غير قانوني. لاحظ بشكل خاص وهذا يعني يجب تحويل DLL في المجلد "C:\Program Files" باسمه قصيرة.
  2. قد لا يحتوي على <dllname>مسافات أو فاصلات أو علامات الاقتباس. هذا تحديد في المحلل اللغوي Rundll سطر الأوامر.
  3. في سطر الأوامر أعلاه الفاصلة (،) بين <dllname>في اسم الدالة <entrypont>بالغة الأهمية. في حالة فقدان الفاصل الفاصلة Rundll أو Rundll32 ستفشل دون تشير إلى أي أخطاء. بالإضافة إلى ذلك، لا يكون هناك أية مسافات بيضاء بين في <dllname>الفاصلة والدالة <entrypoint>.

كيفية عمل Rundll

Rundll بتنفيذ الخطوات التالية:
  1. يوزع هذا سطر الأوامر.
  2. تحميل DLL المحدد بواسطة LoadLibrary().
  3. يحصل على عنوان الدالة <entrypoint>عبر GetProcAddress().
  4. تستدعي الدالة <entrypoint>تمرير خلفي سطر الأوامر وهو < وسيطات اختيارية >.
  5. عندما ترجع الدالة <entrypoint>unloads Rundll.exe DLL و إنهاء.

كيفية كتابة كلمة DLL

DLL الخاص بك كتابة الدالة <entrypoint>مع النموذج الأولي التالية:

DLL 16 بت:

  void FAR PASCAL __loadds  EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);				
DLL 32-بت:
  void CALLBACK  EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);				
المحاولة ، وجود مشكلات 3 في الاعتبار مع الدالة نقطة الدخول:
  1. obviously ، يجب أن يتم استبدال اسم "نقطة" الاسم الفعلي للدالة نقطة الإدخال. ملاحظة يشير الإدخال الخاص Rundll32 غير متعلق بالكامل الدالة DllEntryPoint في DLL 32-بت أي عملية مقابض و مؤشر ترابط إرفاق/فصل الإعلامات.
  2. يجب أن يتم تعريف الدالة نقطة إدخال لـ Rundll32 باستخدام _stdcall استدعاء اصطلاح (افتراضيات رد الاتصال باستخدام السمة _stdcall). في حالة فقدان السمة _stdcall الافتراضي _cdecl اصطلاح استدعاء الدالة ثم ثم Rundll32 سيتم إنهاء بشكل غير طبيعي بعد استدعاء الدالة.
  3. حيث يجب أن تقوم بتعريف الدالة مع _stdcall استدعاء اصطلاح كما هو موضح أعلاه يتبع سوف بالفعل تصديرها كـ _EntryPoint@16 إذا كتابة DLL في C برنامج التحويل البرمجي Visual C++ أو سيستخدم إضافية زخرفة اسم إذا كتابة DLL في C++. لذا، الانتباه من استخدام الاسم الذي تم تصديره بشكل صحيح في سطر الأوامر Rundll أو Rundll32. إذا كنت تريد تجنب استخدام تزيين أسماء أو استخدام ملف .def وتصدير الدالة نقطة إدخال حسب الاسم. الرجاء الرجوع إلى وثائق المنتج و التالية تحتوي هذه المقالة على ارتباطات للحصول على مزيد من المعلومات على اسم زخرفة عند استخدام compilers Visual C++:
    140485تصدير رموز Like PASCAL في DLLs 32-بت
معلمات نقطة الإدخال Rundll كالتالي:
   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				
في المثال التالي:
     RUNDLL.EXE SETUPX.DLL,InstallHinfSection 132 C:\WINDOWS\INF\SHELL.INF				
Rundll هل استدعاء دالة نقطة الدخول InstallHinfSection() في Setupx.dll وتمريرها المعلمات التالية:
   hwnd = (parent window handle)   hinst = HINSTANCE of SETUPX.DLL   lpszCmdLine = "132 C:\WINDOWS\INF\SHELL.INF"   nCmdShow = (whatever the nCmdShow was passed to CreateProcess)				
<entrypoint> الملاحظات هي الدالة < نقطة الدخول > (أو InstallHinfSection() في المثال أعلاه) له تحليل سطر الأوامر الخاصة به (lpszCmdLine المعلمة أعلاه) ثم استخدم المعلمات الفردية حسب الحاجة. يوزع Rundll.exe فقط إلى الوسائط الاختيارية التي تم تمريرها إلى سطر الأوامر الخاصة به. باقي التوزيع إلى الدالة <entrypoint>.

ملاحظات خاصة على الاختلافات بين نظام التشغيل Windows 95 و Windows NT

في Windows NT و Windows 2000 و Windows XP السلوك Rundll32.exe مختلفة قليلاً ، لاحتواء UNICODE أسطر الأوامر.

Windows NT يحاول أولاً على GetProcAddress لـ <entrypoint>غرب إذا تم العثور على نقطة الإدخال هذه ثم النموذج الأولي يفترض أن تكون:
   void CALLBACK   EntryPointW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine,               int nCmdShow);				
هذا هو نفس نقطة ANSI فيما عدا أن المعلمة lpszCmdLine الآن سلسلة UNICODE.

إذا لم يتم العثور على نقطة إدخال وأبيض <EntryPoint>ثم يقوم Windows NT GetProcAddress لـ <entrypoint>A ومن أجل <entrypoint>. إذا تم العثور على أي, فإنه يعتبر نقطة إدخال ANSI ثم تتم معاملتها بنفس 98 Windows 95 Me. طريقة لذلك، إذا كنت تريد DLL تشغيلها على Windows 95 مع دعم ANSI على 2000 NT Windows XP مع دعم UNICODE يجب تصدير دالات اثنين: EntryPointW و نقطة. على Windows NT/2000/Me ، سوف يتم استدعاء الدالة EntryPointW مع سطر أوامر UNICODE; في نظام التشغيل Windows 95/98/Me ، سيتم تسمية الدالة نقطة الدخول بسطر الأوامر ANSI.
أدوات win95

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 164787 - آخر مراجعة: 11/21/2006 15:45:33 - المراجعة: 4.4

Microsoft Win32 واجهة برمجة تطبيقات

  • kbmt kbdll kbfaq kbinfo kbkernbase kbprogramming kbusage KB164787 KbMtar
تعليقات
tml>