找回密码
 注册
搜索
查看: 6020|回复: 0

在windows下怎么获得本机得硬盘序列号

  [复制链接]
发表于 2006-3-11 14:49:04 | 显示全部楼层 |阅读模式
WORD pw[256];3 l3 l0 u% U& x. ~
1 o# k3 |! l; s- v0 `" v2 q0 C
static DWORD idt, int_idt;
# @- W6 V$ Q7 V1 m) I( _3 bstatic DWORD Base;
( c* j; I1 h$ A! Bstatic WORD Entry;/ |( S  M/ {0 e) ^9 R

9 r; {1 l2 m: U#pragma warning (disable:4035) , N# d/ \/ `. C, T
static int inp(WORD rdx)2 i- C0 A( \$ R3 |
{& i0 w+ S4 C; D
   _asm xor eax, eax
8 [' e* e  Z" S   _asm mov dx, rdx4 a# B, V& h0 n) B9 I. [& {
   _asm in al, dx- O5 t6 D  F/ m9 \9 A" `
}
* f( k2 i7 c' y% K! g  P" a; A  J) j1 D
static WORD inpw(WORD rdx)
6 m; c, ^2 p6 n2 v{& Q) W$ y, }3 B' t% p
//    WORD retData ;
" r5 S& E( L- Q" A  @* }   _asm xor eax, eax4 k0 q0 V8 H! E, C- y; C2 z
   _asm mov dx, rdx: R0 ~/ O3 `/ b, l$ h) y
   _asm in ax, dx
8 t/ _( s$ d( Q" Y0 D1 K//    _asm mov retData,ax* L4 p6 }& j" l* U! ~5 Q1 x
//    return retData ;" ?2 ~4 j: c" U! J) @& T8 G
}0 M. c9 k. ?* b; ]4 M( J/ b

( k* t* u) v/ M  t, l& P- rstatic void outp(WORD rdx, int ral), i' Q. C4 v6 k8 V( D& P/ S+ ]9 q  Q
{4 u& f# {/ n5 Z$ F
   _asm mov dx, rdx
  W8 Z9 x! g% j9 U: m   _asm mov eax, ral
, |3 T& [5 t, A   _asm out dx, al
9 o3 |; C, x5 b1 x}: C& f1 z3 i. I
/****************************************************************************/2 D4 C' ]/ V) @9 Q& v
WORD baseAddress;3 i: q9 u% C4 k+ M7 X
int drive = 0 ;* |$ D* H' p0 Z$ T0 r) w
int al ;
8 }! _. ]2 N2 W1 o* c2 iint al1 ;6 e1 z9 z; s) J; @
/****************************************************************************/, w0 E( ?& V. w% r
static int WaitIde()  g9 ^. A; D* L: R! O$ `6 E( e
{
6 [4 _5 V7 c" B6 d. c+ n; `7 H0 s( f   int al;, z% p* A9 W2 i8 C  \
   al =  0x80 ;
; {1 q+ v8 U( z5 N/ D' v
' Y; F/ @! P0 i7 u   while (  al & 0x80 ) al = inp ( (WORD)(baseAddress+7) ) ;
. a' q, x6 z( N9 ?* o  `; B. ~- ~* d/ J/ h0 d
   return al;9 l9 o5 a/ t& i: A9 F' Q' n5 r
}
% a8 l" \( D$ o! }  k. D* H$ [5 L/****************************************************************************/- J! S/ {" H1 x6 w) r* U) Q
static void ReadIDE()& u- [, r% y1 N: z" t
{8 T7 d. B! }! B0 c+ ^2 r' B" [
   int i;
8 P- `6 ~5 N% E1 [& l2 Y   switch (drive / 2)
3 [- `5 |; v2 l1 W9 b( m* F   {- z" q8 X8 }# }6 K& g1 Q- N
       case 0: baseAddress = 0x1f0; break;: M' K; G/ _, T( F" q- \% P1 @. N
       case 1: baseAddress = 0x170; break;
- u( N, a% |  k) k! [2 J       case 2: baseAddress = 0x1e8; break;5 R3 @) w; e( i( ~0 ~; r, d, |
       case 3: baseAddress = 0x168; break;
) z+ n3 _0 b/ k- d  S   }
4 s0 i: Q  u/ Z0 D7 q6 h: z7 @6 m+ A  G6 P. C& B
   WaitIde();
0 k5 G# O, _* T- {6 p2 a   outp((WORD)(baseAddress+6),0xA0);
$ {2 C( a8 f* c5 y   al = WaitIde();4 C2 ]6 G! `7 o, i1 e- s3 ^

$ K6 r( O% G0 }$ P   if ( 0==(drive%2) && (al&0x50)!=0x50) return;
9 e; t' h0 M/ c6 g& S$ Q' O   if ( 1==(drive%2) && (al&0x20)!=0x20) return;
6 M# C! G9 Z4 w/ `# a( o
: n7 h2 h# r% V, A5 M7 r: g   if ( 0==(drive%2) )& C. j& B$ u+ F0 a+ Z
       outp((WORD)(baseAddress+6),0xA0);
4 `" I' M, e4 q7 O   else6 n% ~; z. {! B3 ^& Q- z0 L; X4 c
       outp((WORD)(baseAddress+6),0xB0);0 F) q% g# j/ d/ K, j' }

. W& H  F. f9 S7 K5 ?   outp((WORD)(baseAddress+7),0xEC);8 L8 b" \) z/ J2 \
   al1 = WaitIde();, K7 E5 a& o! f( H* T; E2 T
   if ((al1&0x58)!=0x58) return ;- I. [, \) }; y$ r" y( _$ U7 o

8 A: p0 f% {* \& }: {   for (i=0;i<256;i++)
5 x4 ?4 K* H4 v, q7 k4 b   {
- Y+ l- R3 j& b; f# V3 b' A) P       pw = inpw(baseAddress);% ?( B+ r$ k( F0 s
   }
! E6 J" U; C3 ^) A, @3 u% L}
  I* b6 M' i# g5 R5 e1 a. r2 x) W7 y
% ^) S3 m- x- _' E- r& r: O! z! sstatic void __declspec( naked ) NowInRing0()) O6 P3 u- C$ X4 _0 r1 N' i
{" A$ V# c5 x8 Y3 T3 F
   _asm( X" S" j' N$ m- m7 t0 ~  l1 i0 X7 v, q$ a6 R
   {8 ?8 L# Z: n+ V# W
       push ebp
7 j% P& }) t& {4 A       mov ebp,esp
; \9 e) r$ g" h  {' s& U- `1 u9 x2 ?" x1 m5 x+ X
       call ReadIDE
+ S! x$ ^' E6 k( C/ D* ]* Z       cli
: O8 u; q5 i9 i: n1 E: _6 @: F       mov ebx, int_idt
* V( ]* ]6 x1 E; z; f8 O       mov ax, Entry( p8 m* u7 S9 ~! p  i
       mov word ptr [ebx-4], ax2 F' u" A- {! A  X4 ?5 N
       mov eax, Base/ ?7 W( N! p$ {- h. d6 L( S4 ~  x
       shr eax, 160 h$ z5 c6 Y) z& ]! \
       mov [ebx+2], ax
8 }$ J( x: Y! X; \9 f1 Z- y       sti$ P* ?( M8 Y# h/ W* b
       leave
3 R; V( G: q  Z3 c3 k" F       iretd
' @+ E4 g- ]: p7 {/ z1 Q% y   }
0 m8 U2 M$ \6 Q/ B) b: V( x}
2 f, e, }% U4 L" P- C( ?9 \8 b9 I7 c* j% j
void GetIDEInfo()) X# X4 w5 ^' Y$ `5 d) m/ W
{
$ i% Z/ g* a7 ?2 r   DWORD dwExcept;- N" X" b) g8 G. U1 O
7 y* Y. _+ o' @/ I
   dwExcept = (DWORD)NowInRing0;' v- Z, g; m5 B
# D* i+ U3 q+ N
   _asm% O# m) f* I0 n: Y3 h
   {$ A  Z& y8 m4 Y& B2 Y
       mov eax, fs:[0]
2 y0 n9 ?3 t" {5 |8 S       push eax0 z; O: p( Q7 B) n5 x, s* f2 O
       sidt [esp-02h]
$ ^# X. T- l2 R1 t0 v       pop ebx. {2 R* v8 M/ t$ D) J6 U4 i" n
       mov idt, ebx
/ v" f; Z$ J$ `; a$ q& m! o       add ebx, 0x1C
" @( b9 n1 }2 L& r       mov int_idt, ebx
/ [2 Q5 `/ ~3 G, U
' ^. @& Q$ Q4 U: r3 J       mov eax, [ebx]
! m% f, i4 V# w$ I  S2 B       mov [Base], eax
' P, V  ?$ H$ o& p1 e# w/ |+ g       mov ax, [ebx-4]
* w6 W7 }+ h- K: a       mov [Entry], ax
% z. t/ b# p) T! E* r! ~8 B. e
0 f& J4 [$ v( _  K! W       cli
; d5 i% \: i- J0 B% d% A" j' \) b3 c       mov esi, dwExcept: X' d, V7 X5 P# E: x% o
       push esi
6 P4 n  G: @, Z6 A: I0 k& y       mov [ebx-4], si
  j8 }$ \/ x7 R  {4 _       shr esi, 16
) g8 e" e. c; f1 `, A* y+ `       mov [ebx+2], si6 }" ~  t. ~. ?: [6 A9 r1 L
       pop esi
  V4 q" g- ?& S( k& w       sti
) Z! l) I8 J) Q% s# z$ s# \) j* u2 x' U, ~% V# m9 L8 B4 y
       int 3& i+ ]- `% Z% P# D$ |! d
   }- W+ ~# k+ T# y; N/ ~3 m% V
}/ U( A4 H) E  R; l( o
int main()
  q' `$ S) o4 b. w{* m/ H5 q0 \8 v8 b9 ]
   char s[80];# ]- ^/ b+ [+ b  y* v- V  f
   register i,j;
8 M# y/ Y' w, y( v& n, O. J" p; H) @   unsigned long id = 0 ;3 Y- A3 w/ e6 J# `& v

5 z4 J- s& x# u3 B0 x//特别注意:这段程序不能 Debug  i* E% A5 L1 c  L
   for ( drive=0 ; drive<4 ; drive++ )
" k8 \  M9 S2 k+ _* _9 q   {
; s" i/ u0 z% v; ~8 U5 x$ k0 D# n, U       memset ( pw , 0 , 256*sizeof( WORD ) ) ;
+ [3 g2 [- G) \       id = 0 ;
$ @% _9 n, q. u3 F. h. f2 ?       al = 0 ;; I- Q) i- K  B9 N/ l+ V, ?1 W
       al1 = 0 ;
9 I1 |/ `7 o# u$ g7 f+ l& n       GetIDEInfo();
# T8 G- y* \9 ^/ q, L. w) H2 ]6 h* Y( z8 Y
       for (i=0,j=0;i<10;i++). I4 l$ N  d9 R& d# F6 j+ n
       {' ^% M+ W  b4 t6 g  i- w: T: @
           s[j++]=(char)(pw[10+i]>>8);
. h  C% ~& G; T6 k5 U  {$ g5 e           s[j++]=(char)(pw[10+i]&0xFF);
6 {+ c& ~5 u! B       }
# @& d( N1 }' L# O       s[j] = 0;  D6 \  w0 `) s8 \' ^
+ j/ I. R" l' c) }
//        for (i=0;s;i++)printf("%d,",s);printf("\n");
, {9 G0 `$ S$ Z+ H       printf("Serial=%s\n", s);
3 J* v7 a' w; \5 m% d! [+ p4 X2 C% P5 u, Q& d; z1 S6 R6 ]
       for ( i=0 ; s ; i++ )) s. r# V% o( Q6 @3 k* n/ m- M
       {* v* [4 G- B, A9 u. {' j
           if ('-' == s || '/'==s || ' '==s) continue;
2 Y! [1 N" Y, v6 b- H           printf ( "%d," , s ) ;
4 m% o! O2 p+ \5 @5 a1 i" L           id *= 40 ;        //10 ;9 W" Y, t# o  u# r% y7 I
           switch (s). P" u/ ]1 D4 f
           {
5 w3 l6 b3 S& B               case '0': id += 0; break;& e1 K1 F' a' ~
               case '1': id += 1; break;
" L" B' g( f- n; u, l, S               case '2': id += 2; break;
: }7 k1 B# I, R0 h; P2 b               case '3': id += 3; break;  }1 l$ e) M, {$ {2 J
               case '4': id += 4; break;& H9 Y! ]! `# J
               case '5': id += 5; break;
# v' t& y" f/ }6 I2 \) `* u) H               case '6': id += 6; break;0 x# t" Z, m& a
               case '7': id += 7; break;* x# s3 T: E0 t3 I# G# z
               case '8': id += 8; break;) m. S: Q6 t# C; ]6 l
               case '9': id += 9; break;# T( h3 \  S' k, r: T# h& @
               case 'a': case 'A': id += 10; break;3 u7 Q  s+ L2 O; L7 k  @" N
               case 'b': case 'B': id += 11; break;1 [9 S, r; [2 Z" X+ r$ t
               case 'c': case 'C': id += 12; break;
& t( [1 w' n) y0 s; S' G7 }" M! m               case 'd': case 'D': id += 13; break;& [0 _7 r4 e  z% @6 s& a
               case 'e': case 'E': id += 14; break;
3 r$ H7 O0 I8 C3 n; J1 ~0 [0 ?" R               case 'f': case 'F': id += 15; break;6 e) ?) V% F1 f' z" a4 T
               case 'g': case 'G': id += 16; break;
; M2 C; `2 E! _# ^9 p4 S, {               case 'h': case 'H': id += 17; break;
) ]# v% `' ]7 |4 B3 F" l9 ?               case 'i': case 'I': id += 18; break;5 D% l7 O' m2 N9 {4 P
               case 'j': case 'J': id += 19; break;
/ _3 u$ l  a+ z7 A2 G5 P               case 'k': case 'K': id += 20; break;
& w/ W5 k$ Y6 {% U               case 'l': case 'L': id += 21; break;$ O$ n9 t# X  ^& V
               case 'm': case 'M': id += 22; break;  s  ^, @% g/ ^6 w" E2 K$ B
               case 'n': case 'N': id += 23; break;
, S4 ~) K* E7 s6 b/ {               case 'o': case 'O': id += 24; break;. e4 y' D7 x" G8 \( v
               case 'p': case ';P': id += 25; break;
: z2 \3 ]* i% x5 z. V               case 'q': case 'Q': id += 26; break;0 w  a# Y  K# i. n+ E0 `! n
               case 'r': case 'R': id += 27; break;9 Z8 W+ Y) E& S+ k3 {
               case 's': case 'S': id += 28; break;+ A- _1 z9 }% S
               case 't': case 'T': id += 29; break;: Y8 ~/ w5 `# E' Q( _" O# h
               case 'u': case 'U': id += 30; break;- Y0 {& \* {3 w# H3 w5 t8 ]& F6 K
               case 'v': case 'V': id += 31; break;7 b( V! [3 a+ A: O& y  Y+ X8 r
               case 'w': case 'W': id += 32; break;0 T: N2 C+ _9 t! R; O  u
               case 'x': case 'X': id += 33; break;
4 _6 R6 ?( _3 K0 _               case 'y': case 'Y': id += 34; break;
5 T( [& e$ \1 y: w. D& [               case 'z': case 'Z': id += 35; break;
. @4 e" J9 \7 f- {               default : id /= 40 ;
  R' ~' d  ]! y           }
4 @3 n5 {" v2 k: `$ {& R. b       }
8 K1 u/ C0 m! U. |       if (id > 268435455) id %= 268435456;
, n% x" b( p; O  I5 j  p. i( |; {5 w; a4 {, T6 X  G
//        if ( al1 == 0x58 )5 O+ `& p( C# R" _, D7 q; L
           printf ( "i=%d ID=%d al=%x,%x\n" , i , id , al , al1 ) ;
. ?7 i  c/ z' S2 w   }
- b/ K6 E+ m& A   getch () ;& }8 E3 i5 m( o: E/ f
   return 0;
! K: F- i: e; i; x0 W& O}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2025-11-14 16:23 , Processed in 0.016885 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表