コード例 #1
0
            static void CreateDeviceKey(string device_name, WindowsIdentity identity)
            {
                using (SafeFileHandle handle = OpenFile(@"\Device\DeviceApi\CMApi", FileAccessRights.Synchronize | FileAccessRights.GenericRead | FileAccessRights.GenericWrite,
                                                        ShareMode.None, FileOpenOptions.NonDirectoryFile | FileOpenOptions.SynchronousIoNonAlert, false))
                {
                    CmApiOpenKeyData            data   = new CmApiOpenKeyData(0x111, 1, device_name, GenericAccessRights.MaximumAllowed, true, 0, Marshal.SizeOf(typeof(CmApiOpenKeyResult)));
                    CmApiOpenKeyResult          result = null;
                    WindowsImpersonationContext ctx    = null;
                    if (identity != null)
                    {
                        ctx = identity.Impersonate();
                    }
                    try
                    {
                        result = DeviceIoControl <CmApiOpenKeyResult>(handle, 0x47085B, data);
                    }
                    finally
                    {
                        if (ctx != null)
                        {
                            ctx.Undo();
                        }
                    }

                    StatusToNtException(result.status);
                }
            }
コード例 #2
0
ファイル: 40573.cs プロジェクト: Amoenus/HoundSploit
 static RegistryKey CreateDeviceKey(string device_name)
 {
     using (SafeFileHandle handle = OpenFile(@"\Device\DeviceApi\CMApi", FileAccessRights.Synchronize | FileAccessRights.GenericRead | FileAccessRights.GenericWrite,
                                             ShareMode.None, FileOpenOptions.NonDirectoryFile | FileOpenOptions.SynchronousIoNonAlert, false))
     {
         CmApiOpenKeyData   data   = new CmApiOpenKeyData(0x211, 1, device_name, GenericAccessRights.MaximumAllowed, true, 0, Marshal.SizeOf(typeof(CmApiOpenKeyResult)));
         CmApiOpenKeyResult result = DeviceIoControl <CmApiOpenKeyResult>(handle, 0x47085B, data);
         StatusToNtException(result.status);
         return(RegistryKey.FromHandle(new SafeRegistryHandle(new IntPtr(result.handle), true)));
     }
 }