2

我有 C# Windows 服务类:

class MyService : ServiceBase
{
    private void InitializeComponent() {
       //some other code ...
       SafeHandle sHandle = this.ServiceHandle; // I want to do this but this fails.
       SetServiceObjectSecurity(sHandle, secInfo, binaryDescriptor);
       //some more code ...
    }
}

如何将 IntPtr(如 this.ServiceHandle)转换为“System.Runtime.InteropServices.SafeHandle”?以便我可以在函数调用“SetServiceObjectSecurity()”中使用它?我的最终目标是授予该服务的管理员权限。

4

1 回答 1

0

您是否尝试过SafeHandle.SetHandle(IntPtr handle)按照此处的说明使用https://msdn.microsoft.com/de-de/library/system.runtime.interopservices.safehandle.sethandle(v=vs.110).aspx并查看是否适合您?

编辑:因为SafeHandle.SetHandle(IntPtr handle)是一个受保护的方法,你可以像这样创建一个派生类:

public class SafeHandleExtended : SafeHandle
{
    public void SetHandleExtended(IntPtr handle)
    {
        this.SetHandle(handle);
    }

    // .. SafeHandle's abstract methods etc. that you need to implement
}

虽然我没有测试过它的正确性,所以我不知道这是否按你想要的方式工作。

于 2017-04-13T09:51:47.210 回答