?? sn.java
字號:
package com.ee2ee.utils;
public class SN
{
static
{
System.loadLibrary("disksn"); //動態庫文件名,不要帶后綴.dll
}
/*
功能:JNI調用,調用DLL中的函數,返回硬盤物理序列號
參數說明:
key【IN, OUT】: 傳遞的密鑰,各個客戶可以使用不同的密鑰,目的是防止動態庫被非授權用戶調用,以及檢測返回的密鑰是否有效(防止惡意替換動態庫)
nKeyLen【IN】: 密鑰長度(字節數)
sn【OUT】: 保存返回的硬盤物理序列號
nSize【IN】: 存放硬盤物理序列號的緩沖區(參數sn)大小
返回值:硬盤物理序列號長度(字節數),返回負數表示錯誤,如:傳遞的密鑰不正確
*/
public native static int getDiskSN(byte[] key, int nKeyLen, byte[] sn, int nSize);
public static String getDiskSN()
{
byte[] key = {0x11, 0x22, (byte)0xee, 0x11, 0x3c, 0x72, 0x57, (byte)0x84}; //傳遞給JNI函數的密鑰
byte[] sn = new byte[128]; //保存硬盤物理序列號
int nSnLen = getDiskSN(key, key.length, sn, sn.length);
if (nSnLen < 0) //非法調用(傳遞的密鑰不正確)
{
return null;
}
//以下應該對返回的密鑰進行檢測,看是不是和預期的相同,本例中先將其打印出來,然后做比較
System.out.print("Return key: ");
for (int i=0; i<key.length; i++)
{
String szHex;
if (key[i] >= 0)
{
szHex = Integer.toString(key[i], 16);
}
else
{
szHex = Integer.toString(256 + key[i], 16); //需要將負數轉換成無符號整數
}
if (szHex.length() < 2) szHex = "0" + szHex; //補齊2位
System.out.print(szHex + " ");
}
System.out.println();
byte[] expKey = {0x22, 0x33, 0x75, 0x24, 0x77, 0x54, 0x61, 0x41}; //期望返回的密鑰
if (!java.util.Arrays.equals(key, expKey))
{
System.out.println("Return key not equal to expected!");
return null;
}
try
{
return new String(sn, 0, nSnLen, "ISO8859_1");
}
catch(java.io.UnsupportedEncodingException ex)
{
return null;
}
}
public static void main(String[] args)
{
System.out.println("Copyright (C) ee2ee.com. All rights reserved.");
System.out.println("Notice: Trial version, the last half is masked by \"*\"!");
System.out.println("disk SN: " + getDiskSN());
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -