Hardware/IOControlCode.cs
author moel.mich
Sun, 23 Sep 2012 18:37:43 +0000
changeset 380 573f1fff48b2
parent 236 763675f19ff4
permissions -rw-r--r--
Fixed Issue 387. The new implementation does not try to start a ring 0 driver that already exists, but could not be opened. It tries to delete the driver and install it new. The driver is now stored temporarily in the application folder. The driver is not correctly removed on system shutdown.
moel@236
     1
/*
moel@236
     2
 
moel@344
     3
  This Source Code Form is subject to the terms of the Mozilla Public
moel@344
     4
  License, v. 2.0. If a copy of the MPL was not distributed with this
moel@344
     5
  file, You can obtain one at http://mozilla.org/MPL/2.0/.
moel@236
     6
 
moel@344
     7
  Copyright (C) 2010 Michael Möller <mmoeller@openhardwaremonitor.org>
moel@344
     8
	
moel@236
     9
*/
moel@236
    10
moel@236
    11
using System;
moel@236
    12
using System.Runtime.InteropServices;
moel@236
    13
moel@236
    14
namespace OpenHardwareMonitor.Hardware {
moel@236
    15
moel@236
    16
  [StructLayout(LayoutKind.Sequential, Pack = 1)]
moel@236
    17
  internal struct IOControlCode {
moel@236
    18
    private uint code;
moel@236
    19
moel@236
    20
    public IOControlCode(uint deviceType, uint function, Access access) :
moel@236
    21
      this(deviceType, function, Method.Buffered, access) { }
moel@236
    22
moel@236
    23
    public IOControlCode(uint deviceType, uint function, Method method, 
moel@236
    24
      Access access) 
moel@236
    25
    {
moel@236
    26
      code = (deviceType << 16) | 
moel@236
    27
        ((uint)access << 14) | (function << 2) | (uint)method;
moel@236
    28
    }
moel@236
    29
moel@236
    30
    public enum Method : uint {
moel@236
    31
      Buffered = 0,
moel@236
    32
      InDirect = 1,
moel@236
    33
      OutDirect = 2,
moel@236
    34
      Neither = 3
moel@236
    35
    }
moel@236
    36
moel@236
    37
    public enum Access : uint {
moel@236
    38
      Any = 0,
moel@236
    39
      Read = 1,
moel@236
    40
      Write = 2
moel@236
    41
    }
moel@236
    42
  }    
moel@236
    43
}