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

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

  [复制链接]
发表于 2006-3-11 14:49:04 | 显示全部楼层 |阅读模式
WORD pw[256];5 O/ ?2 ~) o# I% [" ^7 s, P
$ m/ I7 X" O- A3 I$ G- x) o
static DWORD idt, int_idt;
; p" w( l- E+ A5 g! ostatic DWORD Base;0 ]& f6 `9 `; [/ g2 g/ ^$ M
static WORD Entry;
0 u2 L- `% K; H4 N0 G% Y$ g1 {. V, H' Q: M' ]. I1 P' x
#pragma warning (disable:4035)
3 ?" A+ U3 E5 m' B8 T+ F; g+ Ostatic int inp(WORD rdx)
8 q+ c$ |" H  {7 `* p+ f9 {{: L0 C5 f  {. r6 U4 V3 I
   _asm xor eax, eax
# ~' L3 d5 T, M5 e; G, B   _asm mov dx, rdx# T8 z1 r0 w+ a' o+ d0 a; n1 B
   _asm in al, dx+ ~* [3 p+ a9 z; F/ o5 D
}1 I8 h9 F- |- Q$ A( f2 V" X! \, \% f
! c( a; d1 x5 p# f; F
static WORD inpw(WORD rdx)1 p! [, C# i; G. g) h7 g# I
{8 N+ J& |7 q% m8 t# s7 A3 y
//    WORD retData ;* C7 r' j3 c4 r' @/ t2 S" ]4 a
   _asm xor eax, eax3 }9 _& Z% r; r' }" E
   _asm mov dx, rdx
" U; L, j5 @! T; `- r   _asm in ax, dx
* K5 Q% ?/ `7 P* J' _//    _asm mov retData,ax7 e7 n7 n& V2 C" _* x
//    return retData ;
* s# F6 d: ?# z- w# _}% t& [! ?2 t3 J: g

. m. J. H0 N; p- r. V  Wstatic void outp(WORD rdx, int ral)2 L! A3 z1 `/ w9 u0 f4 ^
{
( T  \3 Y: t# ?8 j; O- Z0 V   _asm mov dx, rdx
2 k: C7 w( f" Z. V3 D, G   _asm mov eax, ral
. v# q5 R! m* U  V   _asm out dx, al9 s( r: e( s- m4 u
}# j/ q1 t4 J1 e/ B) \7 K. L
/****************************************************************************/
% \5 k0 \% C* U$ d& Y$ O" g8 r$ D! XWORD baseAddress;" J) T- s9 H7 w9 g# k
int drive = 0 ;5 Z/ P. ]& |7 [2 l
int al ;, K+ g& C4 p0 U% s; R
int al1 ;6 t: H0 f) g' Z; g2 r
/****************************************************************************/
2 |% A+ L0 ^7 Y- a& z/ n, f2 cstatic int WaitIde()% e4 b0 B& k  e
{
) P. Y# q7 U: y/ [  ]   int al;/ O* l& }8 P' C5 W9 ?- V" Q
   al =  0x80 ;  i% ]% @6 ^# A

, q6 Q- @+ \2 ~! l* C   while (  al & 0x80 ) al = inp ( (WORD)(baseAddress+7) ) ;; D- E% x0 v4 a

9 d7 e% a  y7 U' O% ]   return al;
( J7 [! @/ h; {1 c( {1 T; z: u0 C/ e}
/ y- _# ]6 n' h0 o! _/****************************************************************************/
6 y& t- Q( U* B3 W0 O; U& jstatic void ReadIDE()2 }2 f' [: J( Q% p4 B- F3 @
{
3 q0 I6 K5 T0 Z5 R0 j   int i;7 V0 ?2 \# m( L" x
   switch (drive / 2)( c6 \+ B6 c; U! t' W
   {
  o' _" G0 `, Q* ]       case 0: baseAddress = 0x1f0; break;
) e! x. h7 q- B( A+ H       case 1: baseAddress = 0x170; break;* i+ y- x' P! J% U# P+ D3 I
       case 2: baseAddress = 0x1e8; break;
- }2 P; H& j; @* D4 y  h$ s       case 3: baseAddress = 0x168; break;
$ g$ x, H7 B. K* p   }
1 a6 h( a) F* ~) m# c- {( T
* p- @+ x& p$ r7 q  r   WaitIde();3 ^: t* X5 F  }& S5 {2 N
   outp((WORD)(baseAddress+6),0xA0);0 d5 J5 g2 H, G" P) |2 W( }
   al = WaitIde();
4 L* E* t9 O3 v7 P
; F2 {* `3 F7 @+ d/ I- x( w9 i   if ( 0==(drive%2) && (al&0x50)!=0x50) return;0 n* |4 x, W( i6 B7 K
   if ( 1==(drive%2) && (al&0x20)!=0x20) return;* w0 W5 o( ^' v5 O1 c0 C

" n$ `  P- K& }. n) {* G  l: g* U   if ( 0==(drive%2) )- M4 \  k4 k6 b. F, Q/ f1 q) n0 P
       outp((WORD)(baseAddress+6),0xA0);4 n8 z! p; r' f
   else0 u: X  q9 H, a0 U* l
       outp((WORD)(baseAddress+6),0xB0);) j$ E6 z* H8 c7 ~
* c/ W/ ]% F# y" e$ T  _
   outp((WORD)(baseAddress+7),0xEC);
2 w! a& i8 q6 }1 D5 d   al1 = WaitIde();
$ h. [7 h3 l- V5 ^% a" O/ F   if ((al1&0x58)!=0x58) return ;
$ |! r# T0 V+ @1 O
+ M( E1 @5 O2 |' W  I   for (i=0;i<256;i++)
* P7 B3 Y3 t, O, O" n5 w   {
$ O6 f( B, x0 G       pw = inpw(baseAddress);) ~  u; x; W' X9 ^( s7 D8 X0 p% z
   }9 v' b/ `! x- W
}, {5 |! E7 V3 Y# b  V5 t

6 X. E# G3 v7 Ostatic void __declspec( naked ) NowInRing0()
, ?. Y9 L. X( o; N' G4 l{. T7 Q# e: d1 d0 M
   _asm* f# B. Y4 u6 m9 X
   {8 x' p9 J* G3 i6 H
       push ebp) h! M4 f4 n5 p3 n5 M  @% j
       mov ebp,esp  k9 f5 W/ d/ ^* X! c+ K! l' P
  T5 ]. g8 w6 B. G5 y- R
       call ReadIDE
1 h3 A: E$ \% x0 c       cli
% F7 `) o! q( k4 W$ _0 J       mov ebx, int_idt
1 I3 p* h8 y7 H* Y3 O7 p7 c       mov ax, Entry5 o/ K% R; w7 v2 y4 q- k  W1 X
       mov word ptr [ebx-4], ax
) {" E4 |  u$ C3 ]       mov eax, Base
/ f" k: x# R, X2 _: N1 O, ^  m4 t       shr eax, 16
) i# T  w8 s& R8 S- p5 J; ^9 G       mov [ebx+2], ax, A' T$ v. l+ x3 z; I$ B: z  |
       sti# G3 R7 J6 w7 C0 p9 Q) ^" a) m* L
       leave
# U1 j) {% f; n       iretd
- f. }4 m8 w- p0 X: W# t   }; Y/ `" t8 E4 C, D3 K$ x5 u
}: d/ i, m; _8 R+ y  Q5 s: _/ {

9 w8 d( c' H7 O# H9 Kvoid GetIDEInfo()- |4 ^' f$ ?) ?6 [. v9 h0 ~
{
! s, p; Y8 B* G* H2 {   DWORD dwExcept;
) _: x7 j8 o; X+ h, n6 \3 J/ x' o6 T8 X
8 U5 o/ b5 R% p   dwExcept = (DWORD)NowInRing0;
! h6 Z+ w  R: z! F7 y9 F8 R$ o- v3 l+ p6 Z; s
   _asm; j2 ~& w1 d" ~% h) u
   {% p- t5 a" K1 Z' m( c
       mov eax, fs:[0]
0 n) T% V6 p2 ?, K, j5 {* w0 |       push eax- J2 P$ x3 b7 i" Z  y
       sidt [esp-02h]
7 b3 i4 W$ z- b5 s       pop ebx
. m6 ^; i: x8 I1 [       mov idt, ebx
0 k7 D4 J) [; A$ P       add ebx, 0x1C1 d% d3 k6 A7 r  @
       mov int_idt, ebx
- i" l& R2 a, M6 K9 {2 G: h5 Z/ R/ o' K$ z  z
       mov eax, [ebx]
# W+ l4 R) B$ [  g7 i- a$ X       mov [Base], eax
, l3 T% \6 D! n8 J, N       mov ax, [ebx-4]
  G) q  z5 H1 r  M/ E' m       mov [Entry], ax+ P5 K" P+ Y; I7 `

3 T2 k" o" l' h$ M2 X5 i# G       cli5 V$ z9 k& L1 {2 a3 ~/ R
       mov esi, dwExcept
2 C. q$ i( m3 n$ b- e       push esi
; ]0 E+ n: I- F0 N9 ?       mov [ebx-4], si
% w! \' F( D1 i2 F+ }4 V       shr esi, 16# x* d& S3 P6 Q9 X
       mov [ebx+2], si
$ G! }  R" d+ v4 i" Q8 v       pop esi
9 m, G" F; R  [% T       sti
6 z4 c4 L, n. n- y: U
7 U, i% ?( O2 Q  {: P+ [       int 3, @& Q" ^2 y; N, ~% d/ q1 I
   }" _0 g! x! F0 ~! @$ W) g, g9 _
}6 Y# v) q2 O, `
int main()
" j8 [) q. Z. D/ J, q{
% u$ d* D/ N3 g) S/ D  Y   char s[80];5 X, Y  F% C# t- S( _
   register i,j;, m4 z7 `3 {" B
   unsigned long id = 0 ;5 Q) }! `6 b; X8 _

2 {+ f) c- P& m8 n3 Q* _& w//特别注意:这段程序不能 Debug
5 }4 n% s* F$ F1 S! }% K. D, p   for ( drive=0 ; drive<4 ; drive++ )( p4 V* _* L, y, S( l
   {5 ]( D7 o# j0 P( j, j$ w  k
       memset ( pw , 0 , 256*sizeof( WORD ) ) ;
/ @, {* v+ z: P! G! \: L       id = 0 ;# ]$ |) v9 n8 E- V5 I+ `9 h
       al = 0 ;
6 [/ A. ?) c0 p4 U) p       al1 = 0 ;
, a. Q# I0 t) l, ~       GetIDEInfo();* E& J3 ^! }$ t7 W& C' W
- k/ O# L6 {7 d4 ?2 ]. y2 C
       for (i=0,j=0;i<10;i++)
& t1 D# @$ `# F6 ?       {
2 @# f. I3 j, _. P+ d, e           s[j++]=(char)(pw[10+i]>>8);
  }, H! u6 {9 f0 v( f           s[j++]=(char)(pw[10+i]&0xFF);/ k) N" Y7 D4 ]# n* [7 `* }
       }
1 r4 ^) h+ C9 f' ?* c6 e# z! Y: q       s[j] = 0;  c7 D4 @- {% ?- Y$ m
+ v* [3 a/ d; E% Q7 S0 `( c
//        for (i=0;s;i++)printf("%d,",s);printf("\n");
. y5 A1 x; L6 {( @+ P3 E       printf("Serial=%s\n", s);+ J5 P; }9 u# q9 m
6 M! `5 U. P- C" B' h! ~
       for ( i=0 ; s ; i++ )" J! J% k; d5 X" z
       {/ x0 I  l& g" N7 E  j, F
           if ('-' == s || '/'==s || ' '==s) continue;
) {" F' N1 ~- i( d$ P9 W           printf ( "%d," , s ) ;
7 \7 @9 U& ^; m; E! d: v1 r; k, g# w           id *= 40 ;        //10 ;/ d3 x# O/ O( ?& H
           switch (s)
. J) Z8 A+ g1 N0 {           {
( n* m1 q7 U: Q; x; l: b               case '0': id += 0; break;) ?/ S: }' i) y4 @* T9 m7 I
               case '1': id += 1; break;
9 F$ [( ?' ^0 ?6 Z0 w4 v- k               case '2': id += 2; break;
8 h+ ~5 l! H2 Z, Z  r5 {               case '3': id += 3; break;
( M" E  r0 ?; H  N               case '4': id += 4; break;
; P- J: d4 `( P/ q3 O1 r7 o! X& M               case '5': id += 5; break;
" s; Y$ M# u2 K; x) Y               case '6': id += 6; break;
- o; }9 Q1 @, V               case '7': id += 7; break;
( _9 x  ?; y4 t* o2 F9 t! }               case '8': id += 8; break;3 q' [. }) M) s6 Z) i
               case '9': id += 9; break;2 [8 X; J, \( Y* S
               case 'a': case 'A': id += 10; break;
- n" q+ W+ U, o               case 'b': case 'B': id += 11; break;! T# P1 H4 b/ q, G$ @; Q6 @# w
               case 'c': case 'C': id += 12; break;- u" I+ k' A) `3 d+ \6 o$ _
               case 'd': case 'D': id += 13; break;: I1 B' t; d5 N! o7 }  k: Y
               case 'e': case 'E': id += 14; break;
) Q* h/ T  ?& L               case 'f': case 'F': id += 15; break;% F3 ~$ G! J# H, e8 Y& `* z
               case 'g': case 'G': id += 16; break;! H3 F: G6 ?) }) O- e
               case 'h': case 'H': id += 17; break;
9 w# z4 s/ t1 Z4 G& J               case 'i': case 'I': id += 18; break;5 [/ m0 I# Z% A. c( k8 @
               case 'j': case 'J': id += 19; break;
# ^! A# P& i* T* C+ R4 l               case 'k': case 'K': id += 20; break;
0 w2 \1 o0 O9 _1 k# L               case 'l': case 'L': id += 21; break;' Z9 m  N/ O# ?+ m! V$ ?! s! v
               case 'm': case 'M': id += 22; break;4 m4 k  r' B3 k* {+ M9 i
               case 'n': case 'N': id += 23; break;
. j+ S. e/ u4 F7 J' d4 a( E               case 'o': case 'O': id += 24; break;7 I% Y+ _: n& P4 c+ s1 r2 f3 Y
               case 'p': case ';P': id += 25; break;. z  D7 Y/ m% q& ?
               case 'q': case 'Q': id += 26; break;! ?% B" O: u0 f
               case 'r': case 'R': id += 27; break;
6 s( J6 ]$ h! F2 S, L5 x  i               case 's': case 'S': id += 28; break;
1 g3 v" Y; c7 t               case 't': case 'T': id += 29; break;' t4 q3 |3 `; d7 d. ~# n7 y3 ]
               case 'u': case 'U': id += 30; break;
( ~" R5 f" z# `) T' `5 V! y' q/ ?. O               case 'v': case 'V': id += 31; break;# v- ?/ J8 w' ^% ~4 ]" L* R, }
               case 'w': case 'W': id += 32; break;
2 A6 p) c- ?, d; X) s               case 'x': case 'X': id += 33; break;6 [- [' Q( Z& d6 L
               case 'y': case 'Y': id += 34; break;
9 d# S* N( i% v9 L9 ?! i! K               case 'z': case 'Z': id += 35; break;* ]0 }+ l/ d5 P
               default : id /= 40 ;( `+ v$ a! o% w" [/ ?
           }
: D& x" e, a! m+ n+ ~+ g- O) E" i       }9 O& W1 V, k/ _; O2 x3 A
       if (id > 268435455) id %= 268435456;
: c# V! v# x( X# Q0 D
- {3 A) y* V, i4 N. L//        if ( al1 == 0x58 ). M. y; @  `1 y# a
           printf ( "i=%d ID=%d al=%x,%x\n" , i , id , al , al1 ) ;# H" c& x# t9 Q. E/ X" U7 v
   }
) e  ]3 [, j0 R   getch () ;! ~5 L$ s# `! A1 \0 i3 u
   return 0;1 n! {1 U. |, K" a+ o2 C  a/ _
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-19 22:36 , Processed in 0.035075 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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