لماذا RegOpenKeyEx () إرجاع رمز الخطأ 2 على ويندوز فيستا 64BIT؟

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

سؤال

ولقد جعل المكالمة التالية:

result = RegOpenKeyEx(key, s, 0, KEY_READ, &key);

و(C ++، فيجوال استوديو (5)، 64BIT فيستا).

ووفشل مع رمز الخطأ 2 ( "الملف غير موجود") على الرغم من "regedit" يدل على ان المفتاح موجود. عملت هذا الرمز دائما على 32BIT وXP. لماذا هو "الملف غير موجود" عندما يكون من الواضح أن هناك؟

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

المحلول

واكتشفت أنني يمكن أن تحل مشكلتي باستخدام العلامة: KEY_WOW64_64KEY، كما في:

result = RegOpenKeyEx(key, s, 0, KEY_READ|KEY_WOW64_64KEY, &key);

لشرح واف: 32 بت و 64- الشيء بيانات التطبيق في تسجيل

نصائح أخرى

في نظام ويندوز 64 بت يتم تقسيم التسجيل في الواقع إلى قسمين. يستخدم مقطع واحد من خلال عمليات 64 بت، وجزء واحد من قبل عمليات 32 بت.

وعلى سبيل المثال، إذا كان تطبيق 32 بت يكتب برمجيا إلى ما تعتقد أنه HKLM \ SOFTWARE \ شركة \ التطبيق، هو إعادة توجيه فعلا من قبل WOW64 طبقة إلى HKLM \ SOFTWARE \ Wow6432Node \ شركة \ التطبيق.

وحتى عند تشغيل تطبيقات 32 بت واستدعاء RegOpenKeyEx انها تعمل في الواقع ضد Wow6432Node \ مجلد، وليس العادية عقدة \ SOFTWARE.

لديك لتجميع مع "مجموعة استخدام متعدد البايت الأحرف" أو سلسلة يلقي في التعليمات البرمجية إلى (LPWSTR)

وكان لي مشكلة مماثلة. كنت تستخدم:

dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                                   (LPWSTR)"SOFTWARE\\0test",
                                   0,
                                   WRITE_DAC ,
                                   &hKey);

وهذا لم تنجح. حاولت ذلك مثل هذا وعملت:

dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                                   _T("SOFTWARE\\0test"),
                                   0,
                                   WRITE_DAC ,
                                   &hKey);

نعم، WIN7 64B، إضافة المزيد من KEY_WOW64_64KEY العلم، وأنها ستعمل. إذا لا تعمل، راجع HTTP: // MSDN. microsoft.com/en-us/library/ms724897(v=VS.85).aspx

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