2012-11-03 13 views
6

मैं एक ड्राइवर विकसित कर रहा हूं जो विंडोज़ में कुछ कार्यों को हुक करता है (सख्त ड्राइवर जो कुछ क्रियाओं को अवरुद्ध करेगा)। समस्या यह है कि मैं लॉग करना चाहता हूं कि वह उपयोगकर्ता कौन था जो उन कार्यों को चलाने का प्रयास करता था।कर्नेल मोड हुक में कॉलर एसआईडी कैसे प्राप्त करूं? (विंडोज़)

उदाहरण के लिए, मैंने रजिस्ट्री लेखन को फ़िल्टर करने के लिए ZwSetValueKey पर एक हुक डाला है।

हुक पूरी तरह से काम करता है, लेकिन मुझे नहीं पता कि कॉलर एसआईडी कैसे प्राप्त करें। मुझे पता चला है कि मैं निर्धारित कर सकता हूं कि ExGetPreviousMode का उपयोग कर कॉलर का तरीका (यानी उपयोगकर्ता मोड या कर्नेल मोड)। लेकिन मुझे यकीन नहीं है कि अगर कॉलर उपयोगकर्ता मोड में था तो एसआईडी को कैसे निर्धारित किया जाए।

धन्यवाद।

उत्तर

4

इस उपयोगकर्ता मोड थे, तो आप GetCurrentProcess या GetCurrentThread के साथ शुरू होता है, और फिर GetProcessToken या GetThreadToken कहते हैं। यह आपको एक एक्सेस टोकन प्राप्त करेगा, जिससे SID can be extracted सीधे। कर्नेल मॉडल में, PsGetCurrentProcess और ZwOpenProcessTokenEx, और धागे की तरह है।

उपयोगकर्ता स्थान के लिए समकक्ष प्रश्न यहां है: How to get Calling-Process Windows User Access Token

मैंने इसका परीक्षण नहीं किया है, लेकिन मुझे उम्मीद है कि यह आपको शुरू हो जाएगा।

+1

प्रक्रिया टोकन (प्रतिरूपण के कारण) के बजाय थ्रेड टोकन का उपयोग करना बेहतर है, लेकिन मुख्य विचार समान है। धन्यवाद। – DiGMi

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