التحقق من وجود متغير البيئة في عملية أخرى؟
-
05-07-2019 - |
سؤال
في نظام التشغيل Windows، هل هناك طريقة للتحقق من وجود متغير بيئة لعملية أخرى؟تحتاج فقط إلى التحقق من وجودها، وليس بالضرورة الحصول على القيمة.
أحتاج إلى القيام بذلك من الكود.
المحلول
إذا كنت تعرف العنوان الظاهرية التي يتم تخزين البيئة، يمكنك استخدام <لأ href = "http://msdn.microsoft.com/en-us/library/ms684320(VS.85).aspx" يختلط = "noreferrer"> OpenProcess
و ReadProcessMemory
لقراءة البيئة من عملية أخرى. ومع ذلك، للعثور على العنوان الظاهرية، ستحتاج لكزة حولها في الموضوع معلومات بلوك من واحد من المواضيع العملية ".
لحصول ذلك، سوف تحتاج إلى استدعاء GetThreadContext()
بعد استدعاء SuspendThread()
. ولكن من أجل استدعاء هؤلاء، كنت في حاجة الى معالجة موضوع، والتي يمكنك الحصول عليها عن طريق الدعوة <لأ href = "http://msdn.microsoft.com/en-us/library/ms682489(VS.85).aspx" يختلط = "noreferrer"> CreateToolhelp32Snapshot
مع العلم TH32CS_SNAPTHREAD
لإنشاء لقطة من العملية، <وأ href = "http://msdn.microsoft.com/en-us/library/ms686728(VS.85). ASPX "يختلط =" noreferrer "> Thread32First
للحصول على ID خيط الخيط الأول في هذه العملية، و<لأ href =" http://msdn.microsoft.com/en-us/library/ms684335 ( VS.85) .ASPX "يختلط =" noreferrer "> OpenThread
للحصول على مؤشر إلى الموضوع.
نصائح أخرى
مع فائدة:
يمكنك استخدام عملية المستكشف.
انقر بزر الماوس الأيمن على العملية، انتقل إلى ملكيات... وهناك بيئة علامة التبويب التي تسرد متغيرات البيئة لهذه العملية.
مع الكود:
لا يبدو أن هناك استدعاء Win32 API للقيام بذلك مباشرة، ولكن يبدو أنك تتلاعب بنتائج GetProcessStrings
للوصول إلى هذه المعلومات. مقالة CodeProject هذه لديه بعض التعليمات البرمجية لتبدأ.