سؤال

لقد قرأت العديد من الأسئلة المتعلقة بـ UAC و Envilege Elevation لكنني لم أجد إجابة مرضية/شاملة.

لدي هذا السيناريو: في Windows 6 أو أعلى ، عندما يفتح المستخدم نافذة تكوين يجب أن أعرض الدرع (BCM_SETSHIELD) على زر موافق فقط إذا كانت هناك حاجة إلى ارتفاع امتياز لإكمال المهمة. - أعرف أنه في واجهة مستخدم Windows ، يتم تصور الدرع دائمًا لـ "المهام الإدارية" ، حتى لو تم تعطيل UAC ، ولكن لدى العميل هذا الطلب المحدد.

لدي صياغة هذا الشرط من أجل تبين الأيقونة:

  1. المستخدم لديه ليس الحقوق الإدارية
    أو
  2. العملية الحالية TOKEN_ELEVATION_TYPE == TokenElevationTypeLimited

الشرط رقم 1 بسيط: إذا لم يكن للمستخدم ارتفاع حقوق الإدارية ، فمن المطلوب دائمًا بغض النظر عن UAC. #2 يعني أن المستخدم لديه حقوق إدارية وأي قيمة أخرى TOKEN_ELEVATION_TYPE يعني أن الارتفاع غير مطلوب.

هل حقا بهذه البساطة؟ أنا أفتقد شيئا؟ و - هناك نمط موثق أو معروف فيما يتعلق بهذا الموضوع؟

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

المحلول

أنت محق. معظم الناس يضعون الدرع على ما إذا كان الزر سيتم تشغيله مرتفعة ، ولكن الشيء الصحيح الذي يجب القيام به هو وضع الدرع إذا كان الزر سيؤدي إلى ارتفاع (أي قمعه إذا كنت مرتفعة بالفعل ، لأن كل شيء ستظل مرتفعة ما لم تواجه بعض المتاعب في إطلاق عملية غير مرتفعة ، وقمعها إذا كانت UAC متوقفة.)

والخبر السار هو أنه إذا قام شخص ما في مجموعة المسؤولين بتشغيل (تحت UAC) تطبيق غير مرتبط ، فسوف تعود false عندما تسأل عما إذا كانت مسؤول أم لا. لذلك أعتقد أنك قد تكون على ما يرام مع هذا الاختبار.

نصائح أخرى

أرى أن هناك الكثير من الالتباس حول هذا الموضوع والإجابة من كيت هنا غير صحيحة وغير مكتملة.

نظرًا لأن Vista قد يتم تسجيل الدخول ، لكن عملياته لا يتم تشغيلها تلقائيًا. المسؤول لديه ما يسمى "رمز المميز". هذا يعني أنه قد تكون هناك عمليات تعمل لنفس مستخدم المسؤول ، وبعضها يعمل مرتفعة وغيرها لا يتم تشغيله. عندما يدير المسؤول عملية غير مرتفعة ، تمت إزالة بعض امتيازات الرمز المميز له. لم يعد كما في XP حيث تعمل جميع العمليات إما مرتفعة أو غير مرتفعة.

تثبيت عملية المستكشف من www.sysinternals.com وتمكين العمود "مستوى النزاهة". إذا رأيت هناك "متوسطة" ، فإن هذه العملية لا تعمل. إذا رأيت هناك "عالية" العملية تعمل. إذا تم تشغيل العملية بمستوى النزاهة "High" No UAC مطلوب لبدء عملية أخرى مرتفعة.

عند إيقاف تشغيل UAC تمامًا ، يتم تشغيل جميع العمليات "عالية" ، لذلك لا يلزم الارتفاع أبدًا. يمكن إيقاف تشغيل UAC تحت

HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System

تعيين المفتاح "EnableLUA". تغيير هذا الإعداد يتطلب إعادة التشغيل.

ولكن هناك نقطة أخرى لم يتم ذكرها بعد هنا. في لوحة التحكم ، من الممكن تكوين "الارتفاع دون المطالبة". وفي هذه الحالة ، يمكن لمستخدم المسؤول بدء عملية مرتفعة من عملية أخرى غير مرتفعة ولن تظهر أي موجه UAC.

يتم تخزين هذا الإعداد تحت نفس مسار التسجيل في المفتاح "ConsentPromptBehaviorAdmin"لمستخدمي المسؤولين.

بالنسبة لجميع المستخدمين من غير الإدارة ، هناك المفتاح "ConsentPromptBehaviorUser"لكن هذا يغير فقط البهواتية ، ولكن لا يمكن إيقاف الارتفاع. ستحصل غير الإدارة دائمًا على مطالبة UAC. (إذا لم تكن UAC متوقفة تمامًا)

كيف تعرف ما إذا كانت العملية تعمل مرتفعة: اتصل OpenProcess(), ، ومن بعد OpenProcessToken(), ، ومن بعد GetTokenInformation(TokenElevation).

وللحصول على مكالمة مستوى النزاهة GetTokenInformation(TokenIntegrityLevel) وثم GetSidSubAuthority()

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

يرجى ملاحظة أن واجهة برمجة التطبيقات IsUserAnAdmin() تم إهماله. يجب ألا تستخدم بعد الآن منذ Vista. إن التحقق مما إذا كان المستخدم ينتمي إلى مجموعة المسؤولين هو المزيد من الكود الآن.

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