2013-01-07 7 views
7

मैं मूल रूप से अनुरोध जारी करने वाले सीपीयू को CompleteRequest के पूरा होने की पुष्टि करने की कोशिश कर रहा हूं। क्या सीपीयू को पुनर्प्राप्त करने का कोई तरीका है जिसने FdoDeviceControl के दौरान अनुरोध जारी किया है या यह देखने के लिए किसी अन्य तरीके से प्रेषण कतार में प्रवेश करने से पहले अनुरोध कहां से आया था?क्या सीपीयू को पुनर्प्राप्त करना संभव है जिसने WDFREQUEST बनाया है?

+0

उस प्रेषण के बाद सीपीयू को पुनर्प्राप्त करना काफी सरल है। लेकिन क्या मैं गारंटी देता हूं कि कॉलबैक फ़ंक्शन एक ही कोर पर मुद्दों के रूप में चलता है? –

उत्तर

6

एक बार जब आप डीपीसी रूटीन में हों तो यह बताने में बहुत देर हो चुकी है कि अनुरोध कहां से उत्पन्न हुआ। डीपीसी कतार के अनुरोध को कतार देने से पहले आपको KeGetCurrentProcessorNumberEx() को कॉल करने की आवश्यकता है। मुझे लगता है कि अनुरोध एक आईआरपी है ...?

+0

डेविड, मैं अनुरोध को संभालने के लिए केएमडीएफ का उपयोग कर रहा हूं ताकि आईआरपी डब्लूडीएफआरईक्वेट स्ट्रक्चर में लपेटा जा सके। बिंदु पर मैं अनुरोध देखता हूं, यह पहले से ही I/O कतार –

+0

से गुजर चुका है यदि आप केएमडीएफ का उपयोग कर रहे हैं तो आपको WdfDeviceInitSetIoInCallerContextCallback() पर कॉल करने की आवश्यकता है। यह आपको I/O अनुरोध पर kmdf I/O कतार में आने से पहले देखने की अनुमति देगा, आप I/O प्रारंभकर्ता के प्रक्रिया संदर्भ में चल रहे होंगे और आप उस कोर पर होंगे जिसने I/ओ वहां से आप KeGetCurrentProcessorNumberEx() को कॉल कर सकते हैं और परिणाम सहेज सकते हैं। –

+0

उत्तर के रूप में सूचीबद्ध डेविड, धन्यवाद। एक संबंधित नोट पर, क्या मुझे पता चला है कि क्लाइंट के संदर्भ में EvtDeviceWdmIrpPreprocess को भी कॉल किया जाता है (मैं गारंटीकृत आगे की प्रगति कतारों का उपयोग कर रहा हूं, इसलिए मुझे यह सुनिश्चित करने की ज़रूरत है कि मुझे हमेशा कॉल मिल जाए, जो ऐसा लगता है कि SetIoInCallerContextCallback नहीं करता है) –

संबंधित मुद्दे

 संबंधित मुद्दे