« 2007年02月 | メイン | 2010年01月 »

2009年07月10日

USBメモリのシリアル番号の取得

USBデバイスには製造元を表わすベンダーID、製品の種別を表わすプロダクトID、個別の製品の固有番号である iSerialNumber と呼ばれる文字列があり、 WMI 経由でそれらは取得できる。
以下はサンプルの perl スクリプト。

use strict;
use Win32::OLE;
use Win32;

my $strComputer=".";
my $wmi = Win32::OLE->GetObject(
  "WinMgmts:{impersonationLevel=impersonate}!//".
  "$strComputer\\root\\cimv2"
) or die;
my $colDiskDrives = $wmi->ExecQuery(
  "SELECT * FROM Win32_DiskDrive"
);
for my $disk (in $colDiskDrives) {
	next if $disk->{PNPDeviceID}!~/^usbstor/i;
	print "$disk->{PNPDeviceID}\n";
}

これを使うとUSBメモリを簡単な鍵のように使うことができそうだ。
1)予めユーザが使用しているUSBメモリのシリアル番号を登録しておく。
2)ログオンスクリプトで、接続しているUSBメモリのシリアル番号を読み取り、登録済みのシリアル番号が見つからなければシャットダウンする。
3)ログオンスクリプトだけでなく、一定時間ごとにチェックしてやるとさらに良いかもしれない。

投稿者 augustus : 21:48 | コメント (0)