كيفية تعيين الذاكرة المتصل في برنامج تشغيل جهاز Windows CE بعد نهاية مكالمة إلى XXX_IOControl؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

وأنا تنفيذ IOCTL في برنامج تشغيل جهاز Windows CE التي تأخذ مؤشر إلى جزء كبير من الذاكرة التطبيق لأداء I غير المتزامن / بدأت O خلال مكالمة تطبيق لDeviceIoControl.

عند استخدام MapCallerPtr ()، ومؤشر يحصل تفاصيلها عندما ترجع الدالة XXX_IOControl. عندما يتم استخدام المؤشر في IST أنه لم يعد معين مما يؤدي إلى وقوع الحادث.

ما هي أفضل طريقة لرسم خريطة للمؤشر بعد نهاية الدعوة إلى XXX_IOControl؟ تطبيق يضمن أن الذاكرة ستبقى سارية المفعول حتى تتلقى إشارة من السائق أن السائق قد انتهت معها.

وهذا هو على نظام التشغيل Windows CE 5.0.

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

المحلول

وردا على سؤالي الخاصة:

في XXX_IOControl، خريطة المؤشر باستخدام MapPtrToProcess () وحفظ أذونات موضوع باستخدام GetCurrentPermissions (). في موضوع التي سوف تستخدم مؤشر معين، والدعوة SetProcPermissions () مع قيمة الإرجاع حفظها من GetCurrentPermissions () dereference مؤشرات، ومن ثم استعادة الأذونات موضوع عند الانتهاء.

DWORD saved_perms = SetProcPermissions(caller_perms);
... Do stuff ...
SetProcPermissions(saved_perms);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top