انتحال personateloggedonuser وبدء عملية جديدة تستخدم OCX تفشل

StackOverflow https://stackoverflow.com/questions/1360974

  •  20-09-2019
  •  | 
  •  

سؤال

أكتب تطبيق Windows C ++ (أ) ، يستخدم Logonuser و LoadUserProfile و InthersonateLoggedOnuser للحصول على حقوق مستخدم آخر (Y). بمعنى أن A يبدأ باستخدام المستخدم الذي يتم تسجيل الدخول على محطة العمل (X). إذا أراد المستخدم رفع حقوقه ، فيمكنه فقط الضغط على زر وتسجيل الدخول كمستخدم آخر دون الحاجة إلى تسجيل نفسه من Windows والعودة.

الموقف الآن هو (وفقًا لقيم الإرجاع للوظائف): أعمال LogonUser و LoadUserProfile Works و ImpersonateLoggedOnuser تعمل أيضًا.

بعد انتحال شخصية أبدأ عملية أخرى. هذه العملية هي تطبيق (ب) يحتاج إلى تحكم OCX. يفشل هذا ويخبرني التطبيق أن ملف .oxc لم يتم تثبيته بشكل صحيح.

الشيء ، إذا بدأت B مباشرة كمستخدم يتم تسجيل الدخول إلى الجهاز (X) ، فهو يعمل. إذا بدأت B مباشرة كمستخدم (Y) الذي أرغب في رفع حقوقي باستخدام A ، فهو يعمل.

إذا قمت بتسجيل الدخول كـ (x) واختر "Run as" (y) في المستكشف ، فهو يعمل!

هل تعرف الخطوات التي يجب علي القيام بها للقيام بنفس الحوار مثل مربع الحوار "تشغيل" من Windows؟

هل كانت مفيدة؟

المحلول 2

شكرا لكم جميعا لمساعدتكم. كان ما يلي قادرًا على حل المشكلة بالنسبة لي:
أبدأ العملية المطلوبة باستخدام CreateProcessWithLogonw (). للحصول على هذه الوظيفة تعمل بشكل صحيح Reverttoself () قبل أن أسميها وأقوم بالانتحال مرة أخرى بعد ذلك.

لذا فإن التسلسل الآن:

LogonUser()
LoadUserProfile()
ImpersonateLoggedOnUser()
// work with the app
RevertToSelf()
CreateProcessWithLogonW()
// do the impersonation stuff again

نصائح أخرى

لست متأكدًا ، ولكن يبدو أن الانتحال لا يكفي - الانتحال يتعلق فقط بالعملية (أ) ، وبدلاً من ذلك ، حاول المعالجة المخلقة مع ProcessAttributes/threadAttributes بشكل صريح لمستخدم انتحال شخصية من ACL Windows '

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top