日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁(yè)編程開發(fā)C#.NET → C#開發(fā)驅(qū)動(dòng)程序安裝類設(shè)計(jì)思想總結(jié)

      C#開發(fā)驅(qū)動(dòng)程序安裝類設(shè)計(jì)思想總結(jié)

      相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:本站整理時(shí)間:2011/3/31 23:27:50字體大小:A-A+

      作者:佚名點(diǎn)擊:576次評(píng)論:0次標(biāo)簽: 驅(qū)動(dòng)程序

      • 類型:硬件驅(qū)動(dòng)大。1.8M語(yǔ)言:中文 評(píng)分:6.3
      • 標(biāo)簽:
      立即下載

      回憶剛進(jìn)公司那會(huì)兒,手頭的第一個(gè)工作就是完成虛擬鍵盤,也就是通過(guò)驅(qū)動(dòng)程序向鍵盤端口寫入數(shù)據(jù),這份活至今記憶猶新,那會(huì)兒寫的是個(gè)過(guò)濾驅(qū)動(dòng)程序,也就是將我的虛擬設(shè)備綁定到真實(shí)的鍵盤設(shè)備上,當(dāng)驅(qū)動(dòng)程序編譯完成以后,我也總是通過(guò)下面的這個(gè)工具來(lái)安裝驅(qū)動(dòng)程序,

      每編譯好一次就使用這個(gè)工具重新安裝驅(qū)動(dòng)一次,然后通過(guò) DbgView 來(lái)打印消息,

      那會(huì)兒還真傻,為了弄出這么個(gè)虛擬鍵盤,都不曉得安裝了驅(qū)動(dòng)多少回,

      直到后來(lái),當(dāng)驅(qū)動(dòng)程序完成以后,就需要部署驅(qū)動(dòng)程序了,在網(wǎng)上找了很多資料,

      大部分也都是通過(guò) INF 文件來(lái)實(shí)現(xiàn),而對(duì)于 WDM 驅(qū)動(dòng)程序,則還可以通過(guò)服務(wù)控制臺(tái)來(lái)實(shí)現(xiàn)安裝,

      模模糊糊還記得當(dāng)初就是通過(guò)這個(gè)服務(wù)控制臺(tái)來(lái)實(shí)現(xiàn)驅(qū)動(dòng)程序服務(wù)的安裝的。

      當(dāng)初的實(shí)現(xiàn)是這樣的,通過(guò)編寫一個(gè) DLL 來(lái)調(diào)用服務(wù)控制臺(tái) API 從而完成驅(qū)動(dòng)程序的安裝,

      然后再在 C# (應(yīng)用程序是使用的 C# WinForm ,驅(qū)動(dòng)程序必須和這個(gè)應(yīng)用程序通信)中通過(guò)平臺(tái)調(diào)用,

      訪問(wèn)這個(gè) DLL ,這樣就可以實(shí)現(xiàn)驅(qū)動(dòng)程序的動(dòng)態(tài)加載以及動(dòng)態(tài)啟動(dòng)服務(wù)和停止服務(wù)等等操作了。

      而在下面呢,我也算是對(duì)以前寫的那個(gè) DLL 做一個(gè)總結(jié),將其總結(jié)為一個(gè) C# 類,這樣以后用起來(lái)會(huì)更加方便。

      整個(gè)的類,我按分層的思想將其分為三塊(其實(shí)這里將其這樣劃分不是非常合適):

      DriverEntity.cs

      這里即是所謂的實(shí)體層,在該類下面呢,主要包括的是將要在 DriverBLL 中使用到的一些常量數(shù)據(jù),

      這些數(shù)據(jù)呢包括服務(wù)的類型,服務(wù)啟動(dòng)類型,當(dāng)然也包括了將會(huì)使用到的一些結(jié)構(gòu)類型等等信息。

      using System;
      using System.Runtime.InteropServices;
       
      namespace TaskManager.Entity
      {
          public class DriverEntity
          {
              // Service Types (Bit Mask)
              public static readonly UInt32 SERVICE_KERNEL_DRIVER          = 0x00000001;
              public static readonly UInt32 SERVICE_FILE_SYSTEM_DRIVER     = 0x00000002;
              public static readonly UInt32 SERVICE_ADAPTER                = 0x00000004;
              public static readonly UInt32 SERVICE_RECOGNIZER_DRIVER      = 0x00000008;
              public static readonly UInt32 SERVICE_WIN32_OWN_PROCESS      = 0x00000010;
              public static readonly UInt32 SERVICE_WIN32_SHARE_PROCESS    = 0x00000020;
              public static readonly UInt32 SERVICE_INTERACTIVE_PROCESS    = 0x00000100;
              public static readonly UInt32 SERVICE_WIN32                  = 
                  SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS;
       
              public static readonly UInt32 SERVICE_DRIVER                 = 
                  SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | SERVICE_RECOGNIZER_DRIVER;
       
              public static readonly UInt32 SERVICE_TYPE_ALL               = 
                  SERVICE_WIN32 | SERVICE_ADAPTER | SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS;
       
              // Start Type
              public static readonly UInt32 SERVICE_BOOT_START            = 0x00000000;
              public static readonly UInt32 SERVICE_SYSTEM_START          = 0x00000001;
              public static readonly UInt32 SERVICE_AUTO_START            = 0x00000002;
              public static readonly UInt32 SERVICE_DEMAND_START          = 0x00000003;
              public static readonly UInt32 SERVICE_DISABLED              = 0x00000004;
       
              // Error control type
              public static readonly UInt32 SERVICE_ERROR_IGNORE          = 0x00000000;
              public static readonly UInt32 SERVICE_ERROR_NORMAL          = 0x00000001;
              public static readonly UInt32 SERVICE_ERROR_SEVERE          = 0x00000002;
              public static readonly UInt32 SERVICE_ERROR_CRITICAL        = 0x00000003;
       
              // Controls
              public static readonly UInt32 SERVICE_CONTROL_STOP          = 0x00000001;
              public static readonly UInt32 SERVICE_CONTROL_PAUSE         = 0x00000002;
              public static readonly UInt32 SERVICE_CONTROL_CONTINUE      = 0x00000003;
              public static readonly UInt32 SERVICE_CONTROL_INTERROGATE   = 0x00000004;
              public static readonly UInt32 SERVICE_CONTROL_SHUTDOWN      = 0x00000005;
       
              // Service object specific access type
              public static readonly UInt32 SERVICE_QUERY_CONFIG          = 0x0001;
              public static readonly UInt32 SERVICE_CHANGE_CONFIG         = 0x0002;
              public static readonly UInt32 SERVICE_QUERY_STATUS          = 0x0004;
              public static readonly UInt32 SERVICE_ENUMERATE_DEPENDENTS  = 0x0008;
              public static readonly UInt32 SERVICE_START                 = 0x0010;
              public static readonly UInt32 SERVICE_STOP                  = 0x0020;
       
              public static readonly UInt32 SERVICE_ALL_ACCESS            = 0xF01FF;
       
              // Service Control Manager object specific access types
              public static readonly UInt32 SC_MANAGER_ALL_ACCESS         = 0xF003F;
              public static readonly UInt32 SC_MANAGER_CREATE_SERVICE     = 0x0002;
              public static readonly UInt32 SC_MANAGER_CONNECT            = 0x0001;
              public static readonly UInt32 SC_MANAGER_ENUMERATE_SERVICE  = 0x0004;
              public static readonly UInt32 SC_MANAGER_LOCK               = 0x0008;
              public static readonly UInt32 SC_MANAGER_MODIFY_BOOT_CONFIG = 0x0020;
              public static readonly UInt32 SC_MANAGER_QUERY_LOCK_STATUS  = 0x0010;
       
              // These are the generic rights.
              public static readonly UInt32 GENERIC_READ                  = 0x80000000;
              public static readonly UInt32 GENERIC_WRITE                 = 0x40000000;
              public static readonly UInt32 GENERIC_EXECUTE               = 0x20000000;
              public static readonly UInt32 GENERIC_ALL                   = 0x10000000;
       
              //Driver Device Name
              public static readonly String TaskManager_Driver_Nt_Device_Name     = "\\Device\\TaskManagerDevice";
              public static readonly String TaskManager_Driver_Dos_Device_Name    = "\\DosDevices\\TaskManagerDevice";
       
       
       
              [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
              public struct SECURITY_ATTRIBUTES
              {
                  public UInt32 nLength;
                  public IntPtr lpSecurityDescriptor;
                  public bool bInheritHandle;
              }
       
              [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
              public struct OVERLAPPED
              {
                  public UInt32 Internal;
                  public UInt32 InternalHigh;
                  public UInt32 Offset;
                  public UInt32 OffsetHigh;
                  public IntPtr hEvent;
              }
       
              [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
              public struct SERVICE_STATUS
              {
                  public UInt32 dwServiceType;
                  public UInt32 dwCurrentState;
                  public UInt32 dwControlsAccepted;
                  public UInt32 dwWin32ExitCode;
                  public UInt32 dwServiceSpecificExitCode;
                  public UInt32 dwCheckPoint;
                  public UInt32 dwWaitHint;
              }
          }
      } 

      .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

      DriverDAL.cs

      這個(gè)類即是所謂的數(shù)據(jù)訪問(wèn)層,

      一般來(lái)說(shuō),數(shù)據(jù)訪問(wèn)層用在使用數(shù)據(jù)庫(kù)的情況下比較合適,

      但是在這里我將其抽象為只要是提供最基本的數(shù)據(jù)服務(wù)的 API ,我都將其放在數(shù)據(jù)訪問(wèn)層中,

      所以這里主要是 C# 平臺(tái)調(diào)用時(shí),對(duì)于將要調(diào)用的 Win32 API 的一個(gè)聲明,

      其中包括了 CreateFile ,OpenService 等等 API 的聲明。

                           

      using System;
      using System.Runtime.InteropServices;
      using TaskManager.Entity;
       
      namespace TaskManager.DAL
      {
          public class DriverDAL
          {
              [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
              public static extern IntPtr CreateFile(
                  String lpFileName, 
                  UInt32 dwDesiredAccess, 
                  UInt32 dwShareMode, 
                  ref DriverEntity.SECURITY_ATTRIBUTES lpSecurityAttributes, 
                  UInt32 dwCreationDisposition, 
                  UInt32 dwFlagsAndAttributes, 
                  IntPtr hTemplateFile
                  );
       
              [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
              public static extern bool WriteFile(
                  IntPtr hFile, 
                  byte[] lpBuffer, 
                  UInt32 nNumberOfBytesToWrite, 
                  ref UInt32 lpNumberOfBytesWritten, 
                  ref DriverEntity.OVERLAPPED lpOverlapped
                  );
       
              [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
              public static extern bool DeviceIoControl(
                  IntPtr hDevice, 
                  UInt32 dwIoControlCode, 
                  byte[] lpInBuffer, 
                  UInt32 nInBufferSize, 
                  byte[] lpOutBuffer, 
                  UInt32 nOutBufferSize, 
                  ref UInt32 lpBytesReturned, 
                  ref DriverEntity.OVERLAPPED lpOverlapped
                  );
       
              [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
              public static extern bool CloseHandle(
                  IntPtr hObject
                  );
       
              [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
              public static extern IntPtr CreateEvent(
                  ref DriverEntity.SECURITY_ATTRIBUTES lpEventAttributes, 
                  bool bManualReset, 
                  bool bInitialState, 
                  String lpName
                  );
       
              [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
              public static extern UInt32 WaitForSingleObject(
                  IntPtr hHandle, 
                  UInt32 dwMilliseconds
                  );
       
              [DllImport("kernel32.dll")]
              public static extern UInt32 GetLastError();  
       
       
              [DllImport("advapi32.dll", CharSet = CharSet.Auto)]
              public static extern IntPtr OpenSCManager(
                  String lpMachineName, 
                  String lpDatabaseName, 
                  UInt32 dwDesiredAccess
                  );
       
              [DllImport("advapi32.dll", CharSet = CharSet.Auto)]
              public static extern IntPtr CreateService(
                  IntPtr hSCManager, 
                  String lpServiceName, 
                  String lpDisplayName, 
                  UInt32 dwDesiredAccess, 
                  UInt32 dwServiceType, 
                  UInt32 dwStartType, 
                  UInt32 dwErrorControl, 
                  String lpBinaryPathName, 
                  String lpLoadOrderGroup, 
                  ref UInt32 lpdwTagId,
                  String lpDependencies, 
                  String lpServiceStartName, 
                  String lpPassword
                  );
       
              [DllImport("advapi32.dll", CharSet = CharSet.Auto)]
              public static extern bool CloseServiceHandle(
                  IntPtr hSCObject
                  );
       
              [DllImport("advapi32.dll", CharSet = CharSet.Auto)]
              public static extern bool StartService(
                  IntPtr hService, 
                  UInt32 dwNumServiceArgs, 
                  String lpServiceArgVectors
                  );
       
       
              [DllImport("advapi32.dll", CharSet = CharSet.Auto)]
              public static extern IntPtr OpenService(
                  IntPtr hSCManager, 
                  String lpServiceName, 
                  UInt32 dwDesiredAccess
                  );
       
              [DllImport("advapi32.dll", CharSet = CharSet.Auto)]
              public static extern bool DeleteService(
                  IntPtr hService
                  );
       
              [DllImport("advapi32.dll", CharSet = CharSet.Auto)]
              public static extern bool ControlService(
                  IntPtr hService, 
                  UInt32 dwControl, 
                  ref DriverEntity.SERVICE_STATUS lpServiceStatus
                  );
          }
      }

      .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

      DriverBLL.cs

      這里就是所謂的業(yè)務(wù)邏輯層了,其實(shí)呢,說(shuō)白了,其中包括幾個(gè)重要的方法的實(shí)現(xiàn),

      比如啟動(dòng)驅(qū)動(dòng)程序服務(wù),停止驅(qū)動(dòng)程序服務(wù),安裝啟動(dòng)程序,卸載驅(qū)動(dòng)程序等方法的實(shí)現(xiàn)。

      該類是為應(yīng)用程序提供驅(qū)動(dòng)程序安裝功能的直接類。

                        

      using System;
      using TaskManager.Entity;
      using TaskManager.DAL;
       
      namespace TaskManager.BLL
      {
          public class DriverBLL
          {
              /// <summary>
              /// 啟動(dòng)驅(qū)動(dòng)程序
              /// </summary>
              /// <param name="svcName"></param>
              /// <returns></returns>
              public bool StartDriver(String svcName)
              {
                  IntPtr scManagerHandle;
                  IntPtr schDriverService;
       
                  //打開服務(wù)控制臺(tái)管理器
                  scManagerHandle = DriverDAL.OpenSCManager(null, null, DriverEntity.SC_MANAGER_CREATE_SERVICE);
                  if (null == scManagerHandle || IntPtr.Zero == scManagerHandle)
                  {
                      return false;
                  }
       
                  //打開服務(wù)
                  schDriverService = DriverDAL.OpenService(scManagerHandle, svcName, DriverEntity.SERVICE_ALL_ACCESS);
                  if (null == schDriverService || IntPtr.Zero == schDriverService)
                  {
                      DriverDAL.CloseServiceHandle(scManagerHandle);
                      return false;
                  }
       
                  if (false == DriverDAL.StartService(schDriverService, 0, null))
                  {
                      DriverDAL.CloseServiceHandle(schDriverService);
                      DriverDAL.CloseServiceHandle(scManagerHandle);
                      return false;
                  }
       
                  DriverDAL.CloseServiceHandle(schDriverService);
                  DriverDAL.CloseServiceHandle(scManagerHandle);
       
                  return true;
              }
       
       
              /// <summary>
              /// 停止驅(qū)動(dòng)程序服務(wù)
              /// </summary>
              /// <param name="svcName"></param>
              /// <returns></returns>
              public bool StopDriver(String svcName)
              {
                  IntPtr scManagerHandle;
                  IntPtr schDriverService;
       
                  DriverEntity.SERVICE_STATUS serviceStatus;
       
                  //打開服務(wù)控制臺(tái)管理器
                  scManagerHandle = DriverDAL.OpenSCManager(null, null, DriverEntity.SC_MANAGER_CREATE_SERVICE);
                  if (null == scManagerHandle || IntPtr.Zero == scManagerHandle)
                  {
                      return false;
                  }
       
                  //打開服務(wù)
                  schDriverService = DriverDAL.OpenService(scManagerHandle, svcName, DriverEntity.SERVICE_ALL_ACCESS);
                  if (null == schDriverService || IntPtr.Zero == schDriverService)
                  {
                      DriverDAL.CloseServiceHandle(scManagerHandle);
                      return false;
                  }
       
                  serviceStatus = new DriverEntity.SERVICE_STATUS();
       
                  //停止服務(wù)
                  if (false == DriverDAL.ControlService(schDriverService, DriverEntity.SERVICE_CONTROL_STOP, ref serviceStatus))
                  {
                      DriverDAL.CloseServiceHandle(schDriverService);
                      DriverDAL.CloseServiceHandle(scManagerHandle);
       
                      return false;
                  }
                  else
                  {
                      DriverDAL.CloseServiceHandle(schDriverService);
                      DriverDAL.CloseServiceHandle(scManagerHandle);
       
                      return true;
                  }
              }
       
       
              /// <summary>
              /// 判斷驅(qū)動(dòng)程序是否已經(jīng)安裝
              /// </summary>
              /// <param name="svcName"></param>
              /// <returns></returns>
              public bool DriverIsInstalled(string svcName)
              {
                  IntPtr scManagerHandle;
                  IntPtr schDriverService;
       
                  //打開服務(wù)控制臺(tái)管理器
                  scManagerHandle = DriverDAL.OpenSCManager(null, null, DriverEntity.SC_MANAGER_ALL_ACCESS);
                  if (null == scManagerHandle || IntPtr.Zero == scManagerHandle)
                  {
                      return false;
                  }
       
                  //打開驅(qū)動(dòng)程序服務(wù)
                  schDriverService = DriverDAL.OpenService(scManagerHandle, svcName, DriverEntity.SERVICE_ALL_ACCESS);
                  if (null == schDriverService || IntPtr.Zero == schDriverService)
                  {
                      DriverDAL.CloseServiceHandle(scManagerHandle);
                      return false;
                  }
       
                  DriverDAL.CloseServiceHandle(schDriverService);
                  DriverDAL.CloseServiceHandle(scManagerHandle);
       
                  return true;
              }
       
       
              /// <summary>
              /// 安裝驅(qū)動(dòng)程序服務(wù)
              /// </summary>
              /// <param name="svcDriverPath"></param>
              /// <param name="svcDriverName"></param>
              /// <param name="svcDisplayName"></param>
              /// <returns></returns>
              public bool DriverInstall(String svcDriverPath, String svcDriverName, String svcDisplayName)
              {
                  UInt32 lpdwTagId;
                  IntPtr scManagerHandle;
                  IntPtr schDriverService;
       
                  //打開服務(wù)控制臺(tái)管理器
                  scManagerHandle = DriverDAL.OpenSCManager(null, null, DriverEntity.SC_MANAGER_CREATE_SERVICE);
                  if (null == scManagerHandle || IntPtr.Zero == scManagerHandle)
                  {
                      return false;
                  }
                  if (DriverIsInstalled(svcDriverName) == false)
                  {
                      lpdwTagId = 0;
                      schDriverService = DriverDAL.CreateService(
                          scManagerHandle, svcDriverName, svcDisplayName, 
                          DriverEntity.SERVICE_ALL_ACCESS, 
                          DriverEntity.SERVICE_KERNEL_DRIVER, 
                          DriverEntity.SERVICE_DEMAND_START, 
                          DriverEntity.SERVICE_ERROR_NORMAL, 
                          svcDriverPath, null, 
                          ref lpdwTagId, 
                          null, null, null
                          );
       
                      DriverDAL.CloseServiceHandle(scManagerHandle);
                      if (null == schDriverService || IntPtr.Zero == schDriverService)
                      {
                          return false;
                      }
                      else
                      {
                          return true;
                      }
                  }
       
                  DriverDAL.CloseServiceHandle(scManagerHandle);
                  return true;
              }
       
       
              /// <summary>
              /// 卸載驅(qū)動(dòng)程序服務(wù)
              /// </summary>
              /// <param name="svcName"></param>
              public void DriverUnInstall(String svcName)
              {
                  IntPtr scManagerHandle;
                  IntPtr schDriverService;
       
                  //打開服務(wù)控制臺(tái)管理器
                  scManagerHandle = DriverDAL.OpenSCManager(null, null, DriverEntity.SC_MANAGER_ALL_ACCESS);
                  if (null == scManagerHandle || IntPtr.Zero == scManagerHandle)
                  {
                      return;
                  }
       
                  //打開驅(qū)動(dòng)程序服務(wù)
                  schDriverService = DriverDAL.OpenService(scManagerHandle, svcName, DriverEntity.SERVICE_ALL_ACCESS);
                  if (null == schDriverService || IntPtr.Zero == schDriverService)
                  {
                      DriverDAL.CloseServiceHandle(scManagerHandle);
                      return;
                  }
                  else
                  {
                      DriverDAL.DeleteService(schDriverService);
       
                      DriverDAL.CloseServiceHandle(schDriverService);
                      DriverDAL.CloseServiceHandle(scManagerHandle);
                  }
              }
          }
      }

      .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

      上面的這個(gè)類呢,說(shuō)實(shí)在的,對(duì)于沒(méi)用過(guò)驅(qū)動(dòng)程序的來(lái)說(shuō),屁用沒(méi)一點(diǎn),

      但是如果某位也在煩惱驅(qū)動(dòng)程序的安裝的話,那么恭喜你,你中獎(jiǎng)了 . . .

        萬(wàn)能顯卡
        (240)萬(wàn)能顯卡
        萬(wàn)能顯卡驅(qū)動(dòng)適用于所有顯卡安裝驅(qū)動(dòng)所用,稱之為萬(wàn)能顯卡驅(qū)動(dòng)。顯卡驅(qū)動(dòng)是硬件所對(duì)應(yīng)的軟件,你裝電腦時(shí)那幫你裝電腦的人不是給了你很多碟子的嗎,那些就是驅(qū)動(dòng)程序,其中必然有一張是顯卡的驅(qū)動(dòng)程序。先要確定你的顯卡什么牌子型號(hào)的,如果記不得了,就打開機(jī)箱看那個(gè)豎插在主板上的較大板子一般顯卡有很大的散熱片或風(fēng)扇上的型號(hào)品牌。如果是集成的顯卡在主板上看不到前面說(shuō)的那樣的電路板,就看主板上的型號(hào)品牌,記下來(lái)。但是...更多>>

        相關(guān)評(píng)論

        閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過(guò)難過(guò)
        • 5 囧
        • 3 圍觀圍觀
        • 2 無(wú)聊無(wú)聊

        熱門評(píng)論

        最新評(píng)論

        發(fā)表評(píng)論 查看所有評(píng)論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)