当前位置: 首页 > 编程笔记 >

C#利用win32 Api 修改本地系统时间、获取硬盘序列号

柯曜文
2023-03-14
本文向大家介绍C#利用win32 Api 修改本地系统时间、获取硬盘序列号,包括了C#利用win32 Api 修改本地系统时间、获取硬盘序列号的使用技巧和注意事项,需要的朋友参考一下

C#利用win32 Api 修改本地系统时间、获取硬盘序列号,可以用于软件注册机制的编写!


using System;

using System.Collections.Generic;

using System.Text;

using System.Runtime.InteropServices;

namespace Fengyun

{

    public class Win32

    {

        #region 修改本地系统时间

        [DllImport("Kernel32.dll")]

        private extern static void GetSystemTime(ref SYSTEMTIME lpSystemTime);

        [DllImport("Kernel32.dll")]

        private extern static uint SetLocalTime(ref SYSTEMTIME lpSystemTime);

        [StructLayout(LayoutKind.Sequential)]

        private struct SYSTEMTIME

        {

            public ushort wYear;

            public ushort wMonth;

            public ushort wDayOfWeek;

            public ushort wDay;

            public ushort wHour;

            public ushort wMinute;

            public ushort wSecond;

            public ushort wMilliseconds;

        }

        /// <summary>

        /// 将本地时间与sqlserver服务器时间同步

        /// </summary>

        /// <param name="SqlServerTime">时间</param>

        public static void SetTime(DateTime SqlServerTime)

        {

            SYSTEMTIME st = new SYSTEMTIME();

            st.wYear = Convert.ToUInt16(SqlServerTime.Year);

            st.wMonth = Convert.ToUInt16(SqlServerTime.Month);

            st.wDay = Convert.ToUInt16(SqlServerTime.Day);

            st.wHour = Convert.ToUInt16(SqlServerTime.Hour);

            st.wMilliseconds = Convert.ToUInt16(SqlServerTime.Millisecond);

            st.wMinute = Convert.ToUInt16(SqlServerTime.Minute);

            st.wSecond = Convert.ToUInt16(SqlServerTime.Second);

            SetLocalTime(ref st);

        }

        #endregion

        #region 获取硬盘序列号

        [DllImport("kernel32.dll")]

        private static extern int GetVolumeInformation(

        string lpRootPathName,

        string lpVolumeNameBuffer,

        int nVolumeNameSize,

        ref int lpVolumeSerialNumber,

        int lpMaximumComponentLength,

        int lpFileSystemFlags,

        string lpFileSystemNameBuffer,

        int nFileSystemNameSize

        );

        /// <summary>

        /// 获取硬盘序列号

        /// </summary>

        /// <param name="drvID">硬盘盘符[c|d|e|....]</param>

        /// <returns></returns>

        public static string GetDiskVolume(string drvID)

        {

            const int MAX_FILENAME_LEN = 256;

            int retVal = 0;

            int lpMaximumComponentLength = 0;

            int lpFileSystemFlags = 0;

            string lpVolumeNameBuffer = null;

            string lpFileSystemNameBuffer = null;

            int i = GetVolumeInformation(

            drvID + @":\",

            lpVolumeNameBuffer,

            MAX_FILENAME_LEN,

            ref retVal,

            lpMaximumComponentLength,

            lpFileSystemFlags,

            lpFileSystemNameBuffer,

            MAX_FILENAME_LEN

            );

            return retVal.ToString("x");

        }

        #endregion

    }

}

以上就是本文所分享的代码的全部内容了,希望对大家学习C#能有所帮助。

 类似资料:
  • 问题内容: 如何使用Java获取硬盘的序列号? 问题答案: 该序列号是由操作系统在格式化驱动器时创建的,而不是制造商的序列号。它是唯一的,因为它是根据当前时间信息动态创建的。AFAIK,没有返回制造商SN的API。充其量,可以读取高清固件的序列号,但这将涉及一些非常底层的API调用。请记住,即使您获得该编号,也无法保证该编号是唯一的,因为每个制造商都可以根据需要分配编号。

  • 问题内容: 我怎样才能得到一个的使用驱动器上? 我想使用Python模块来执行此操作,而不是运行诸如的外部程序。也许使用模块? 问题答案: 如您所建议,fcntl是在Linux上执行此操作的方法。您要转换的C代码如下所示: 在Ubuntu 9.10上将其翻译成Python,它有点像这样: 抱歉,我将原始的C结构作为注释包含在内非常有用。另外,我对和模块都还很陌生,所以我可能正在做一些单调的事情。无

  • 本文向大家介绍C#实现读取指定盘符硬盘序列号的方法,包括了C#实现读取指定盘符硬盘序列号的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现读取指定盘符硬盘序列号的方法。分享给大家供大家参考,具体如下: 更多关于C#相关内容感兴趣的读者可查看本站专题:《C#窗体操作技巧汇总》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#程序设计之线程使用技巧总结》、《C#操作

  • 本文向大家介绍Linux 判断文件修改时间和系统时间差,包括了Linux 判断文件修改时间和系统时间差的使用技巧和注意事项,需要的朋友参考一下  Linux 判断文件修改时间和系统时间差 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

  • 本文向大家介绍python修改操作系统时间的方法,包括了python修改操作系统时间的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python修改操作系统时间的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Python程序设计有所帮助。

  • 准备硬盘 Ceph 注重数据安全,就是说, Ceph 客户端收到数据已写入存储器的通知时,数据确实已写入硬盘。使用较老的内核(版本小于 2.6.33 )时,如果日志在原始硬盘上,就要禁用写缓存;较新的内核没问题。 用 hdparm 禁用硬盘的写缓冲功能。 sudo hdparm -W 0 /dev/hda 0 在生产环境,我们建议操作系统和 Ceph OSD 守护进程数据分别放到不同的硬盘。如果必