2011-11-08 44 views
12

Làm cách nào để kiểm tra xem liệu một quy trình có đang hoạt động với quyền quản trị không?Cách kiểm tra xem quy trình có quyền quản trị

Tôi đã kiểm tra IsUserAnAdim function in MSDN nhưng không được khuyến nghị vì nó có thể bị thay đổi hoặc không khả dụng trong các phiên bản Windows tiếp theo. Thay vào đó, bạn nên sử dụng chức năng CheckTokenMembership.

Sau đó, tôi đã xem ví dụ thay thế trong MSDN từ mô tả về hàm CheckTokenMembership. Tuy nhiên, có nhận xét của Stefan Ozminski trong MSDN đề cập rằng ví dụ này không hoạt động đúng trong Windows Vista nếu UAC bị tắt.

Cuối cùng tôi đã cố gắng để sử dụng mã Stefan Ozminski từ MSDN, nhưng nó xác định rằng quá trình này có quyền quản trị ngay cả khi tôi khởi động nó dưới một người sử dụng bình thường mà không có quyền quản trị trong Windows 7.

+1

Nếu bạn không thể hiển thị bất kỳ mã ở đây, ít nhất bạn có thể cung cấp cho chúng có liên hệ với các tham chiếu bài viết/ý kiến ​​/ mã? –

+2

Nó sẽ giúp rất nhiều bạn xác định chính xác những gì bạn có nghĩa là "quyền quản trị". Bạn có nghĩa là nếu nó đang chạy như một người dùng trong nhóm quản trị viên? Bạn có nghĩa là nếu nó có đầy đủ các quyền UAC? –

+0

Bạn đã thử API PrivilegeCheck chưa? – sarat

Trả lời

36

Điều này sẽ cho bạn biết nếu bạn đang chạy với đặc quyền nâng cao hay không. Bạn có thể đặt tệp kê khai để chạy với nhiều nhất có thể nếu bạn muốn nó hiển thị. Ngoài ra còn có các cách khác để yêu cầu các cửa sổ thông qua mã cho thông tin đăng nhập thay thế.

 
BOOL IsElevated() { 
    BOOL fRet = FALSE; 
    HANDLE hToken = NULL; 
    if(OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hToken)) { 
     TOKEN_ELEVATION Elevation; 
     DWORD cbSize = sizeof(TOKEN_ELEVATION); 
     if(GetTokenInformation(hToken, TokenElevation, &Elevation, sizeof(Elevation), &cbSize)) { 
      fRet = Elevation.TokenIsElevated; 
     } 
    } 
    if(hToken) { 
     CloseHandle(hToken); 
    } 
    return fRet; 
} 

Các vấn đề liên quan