سؤال

أنا استخدم creduiconfirmcredentials بالاشتراك معcreduipromptforcredentials.

أنا تعيين EXPECT_CONFIRMATION, ، وعندما تكون أوراق الاعتماد أول قدمه المستخدم المكالمة إلى CredUIConfirmCredentials عائدات no_error كما هو متوقع.

ومع ذلك ، في جميع المكالمات اللاحقة إلى CredUIConfirmCredentials, ، مع نفس أوراق الاعتماد ، error_invalid_parameter يتم إرجاع. هذا وصف من قبل مستندات SDK كما:

فشلت محاولة تأكيد بيانات اعتماد الانتظار لأن بيانات الاعتماد تحتوي على بيانات غير صالحة أو غير متسقة.

وهو أمر محير إلى حد ما لأنها بالضبط نفس أوراق الاعتماد التي تم حفظها بنجاح في الأصل.

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


خلفية

يمكنك استخدام نظام اعتماد Window لتخزين بيانات الاعتماد لتطبيقك الخاص. أنت تخبر Windows أنك تريد المطالبة بـ "نوعي"بيانات الاعتماد لبعض"هدف":

كود مزيف:

CredUIPromptForCredentials("My Application", ref username, ref password);

سيؤدي ذلك بعد ذلك إلى عرض Windows على مربع حوار:

alt text

ثم تعمل وظيفتك على التحقق من بيانات الاعتماد التي أدخلها المستخدم. إذا كانت صالحة ، فأنت تخبر Windows هذا عن طريق الاتصال تأكيد. هذا لضمان حفظ بيانات الاعتماد الصحيحة فقط:

CredUIConfirmCredentials("My Application", true);

بمجرد تأكيد بيانات الاعتماد على أنها صالحة ، سيقوم Windows بحفظها في المتجر الآمن ، والذي يمكنك رؤيته من خلال لوحة التحكم:

alt text

الكلمات المفتاحية: credui ، creduiconfirmcredentials

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

المحلول

لقد وجدت الجواب: حسب التصميم

CredUIConfirmCredentials سيعود خطأ "عندما لا يكون هناك ما تفعله". هذا يعنى:

  • إذا كانت بيانات الاعتماد هي نفسها الموجودة بالفعل في متجر الاعتماد
  • لم يتحقق المستخدم من Rembember my password خانة الاختيار
  • أنت لم تضع ملف CREDUI_FLAGS_EXPECT_CONFIRMATION علَم

حقيقة ان CredUIConfirmCredentials يفشل عندما تكون بيانات الاعتماد هي نفسها كما هو موجود بالفعل في المتجر الموثق على MSDN. (أعلم أنه موثق لأنني أضفت إلى صفحة الوثائق.)

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