CredTwrite إرجاع رمز الخطأ Win32 2 (error_invalid_function) "دالة غير صحيحة."

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

  •  22-09-2019
  •  | 
  •  

سؤال

أحاول الاتصال credwrite, ، لكنها تعود error_invalid_function. يمكنني الاتصال القراءة لإحضار بيانات الاعتماد من متجر كلمات المرور ، ويمكنني تخزين بيانات اعتماد جديدة باستخدام creduipromptforcredentials.

لكن لا يمكنني معرفة كيفية الحصول على credwrite للعمل.

الرمز الذي أستخدمه هو:

var
   Target, Username, Password: WideString;
begin
   Target := 'StackOverflowSomething';
   Username := 'IanBoyd'; 
   Password := 'password69';

   ZeroMemory(@Credentials, SizeOf(Credentials));

   Credentials.TargetName := PWideChar(Target);
   Credentials.Type_ := CRED_TYPE_GENERIC;
   Credentials.UserName := PWideChar(Username);
   Credentials.Persist := CRED_PERSIST_ENTERPRISE;
   Credentials.CredentialBlob := PByte(Password);
   Credentials.CredentialBlobSize := 2*(Length(Password));
   Credentials.UserName := PWideChar(Username);

   if not CredWriteW(@Credentials, 0) then
      RaiseLastWin32Error;

ويعود GetLasterror 1 (ERROR_INVALID_FUNCTION)

هل هذه الوظيفة غير صحيحة؟ انها لا تعود حتى ERROR_INVALID_PARAMETER, ، إنها تعود "وظيفة غير صحيحة". ما هو غير صحيح؟

هل هناك أي رمز نموذج يدعو CredTwrite؟

ملحوظات

  • لقد حاولت استدعاء إصدار ANSI (credwritea) ، نفس النتيجة
  • لقد حاولت استخدام CRED_PERSIST_SESSION و CRED_PERSIST_LOCAL_MACHINE, ، بالإضافة إلى CRED_PERSIST_ENTERPRISE
هل كانت مفيدة؟

المحلول

فما باللك ، لقد اكتشفت ذلك.

وهذا ليس خطأ مكالمة API ، أو معلمات بلدي.

أنا فقط غبي.

وأريد أن أتخلص من ذلك ، دون الحاجة إلى قول ما فعلته :(

نصائح أخرى

هذه مشكلة قديمة جدا، معروفة للغاية مع عمل كبير جدا ومشاهير جدا حول لتجنب التخزين المؤقت للروابط الفردية في فلاش.تقوم ببساطة بإلحاق غير المرغوب فيه على نهاية عنوان URL مع كل مكالمة.على سبيل المثال: giveacodicetagpre.

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

أنا فضولي ، هذا للبطاقة الذكية ، أليس كذلك؟ وأنت تقوم بتخزين رقم التعريف الشخصي إلى البطاقة الذكية ، ربما لم يتم تحميل المرفق/السائق حتى يعمل Credurwrite؟ ربما ، مع وجود أجهزة/برنامج Smartcard Smartcard المحدد القياسي الذي تستخدمه Windows ، سيقوم بتنشيط وظيفة credwrite ، أظن أن CredTwrite تحاول التواصل مع شيء ما (ربما دعوة API عامة إلى وظيفة قياسية داخل أجهزة SmartCard؟) ... فقط ... افكاري...

أتمنى أن يساعد هذا ، مع أطيب التحيات ، توم.

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