C# 获取硬盘序列号 Volume Serial Number

在做软件注册时,通常用硬盘号(建议用散列后的硬盘号)作为本地电脑特征码,加上用户名以及公司名等其他信息,通过一定的算法,得到软件序列号。这样做的好处的显而易见的。它可以防止一个序列号N多人用的现象。现在有些软件就是一个注册码,在网上公开,全世界人都在用。但是也有相应的缺陷。客户只能在一台电脑上用你写的软件。下面的方法通过Windows API获得硬盘号。
using  System.Runtime.InteropServices;
[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 
            ); 

        
private   string  GetVolOf( string  drvID)
            
const int MAX_FILENAME_LEN = 256
            
int retVal = 0
            
int a =0
            
int b =0
            
string str1 = null
            
string str2 = null
            
int i = GetVolumeInformation( 
                drvID 
+ @":"
                str1, 
                MAX_FILENAME_LEN, 
                
ref retVal, 
                a, 
                b, 
                str2, 
                MAX_FILENAME_LEN 
                ); 

            
return retVal.ToString("x"); 
        }
 

 调用方法:例如C盘:GetVolOf("C");

不过无论你的注册算法如何精妙,始终会被破解。因为你的算法始终在软件客户端,cracker总是有机会找到你的注册算法,做出注册机来。看看网上流传的五花八门的注册机就知道了。个人觉得如果做依赖Web的程序,最好还是把注册算法写在Web Service里面,这样cracker就没法从本地破解注册算法了,这样就大大增加了安全性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值