سؤال

هل هناك أي Win32/MFC API للحصول على ملف CSIDL_LOCAL_APPDATA ل أي المستخدم الذي أريده (وليس فقط المستخدم الذي قام بتسجيل الدخول حاليًا)؟لنفترض أن لدي قائمة بالمستخدمين في النموذج "domain\user" وأريد الحصول على قائمة بمساراتهم - هل هذا ممكن؟

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

المحلول

يمكنك الحصول على معرف الأمان (SID) للمستخدم ثم البحث عنه ضمن HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList والحصول على قيمة ProfileImagePath.

بمجرد حصولك على هذا المسار، يمكنك الحصول على CLSID_LOCAL_APPDATA للمستخدم الخاص بك، وتحويل المسار المطلق إلى مسار نسبي إلى ملف التعريف الخاص بك ثم إلحاق هذا المسار النسبي بمسار ملف تعريف المستخدم الآخر.

ومع ذلك، ضع في اعتبارك أن هذا يعتمد على مفتاح تسجيل غير موثق ويمكن أن يؤدي إلى اختراق الإصدارات المستقبلية من نظام التشغيل.(أو كما يقول ريموند تشان:"الآن بعد أن عرفت كيفية القيام بذلك، دعني أخبرك لماذا لا يجب أن تفعل ذلك بهذه الطريقة..." :-))

إذا كان لديك رمز مميز يمثل المستخدم، فيمكنك استخدام SHGetFolderPath أو SHGetKnownFolderPath (في نظام التشغيل Vista والإصدارات الأحدث).ومع ذلك، هناك بعض القيود الأمنية ويجب عليك قراءة MSDN للحصول على التفاصيل.

شجيتفولديرباث - http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspxSHGetKnownFolderPath - http://msdn.microsoft.com/en-us/library/bb762188(VS.85).aspx

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