找回密码
 注册
查看: 6319|回复: 0

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

  [复制链接]
发表于 2006-3-11 14:49:04 | 显示全部楼层 |阅读模式
WORD pw[256];/ Q% y( f' O+ ?' h

- d- u7 y2 ~$ T+ C& w0 K/ nstatic DWORD idt, int_idt;
. }' @7 G4 J/ q, i2 ystatic DWORD Base;
# I. S! W6 d) }/ {& Ustatic WORD Entry;
! Y8 K8 N# H4 h* S* W1 Y' k; f0 i# c. n# c3 Q# E4 x# E
#pragma warning (disable:4035)
* A. Q3 Q) y% h' astatic int inp(WORD rdx)( ?: H/ Q+ q- Z1 d7 z
{4 o8 I. o8 T3 p+ K
   _asm xor eax, eax; y3 ~/ E% D* P9 {1 `4 L
   _asm mov dx, rdx
# h" d: @, m: R6 z9 {" p) a   _asm in al, dx
& d8 E, t  M7 ]# A3 B/ G2 c- N. \}0 L! j/ I$ b$ U  ?2 S
* D5 w/ J# F6 n( W! f3 I! y, T. u; W
static WORD inpw(WORD rdx)
/ b( |/ }( u) a7 b{
0 m, z; C2 K" k, i7 n//    WORD retData ;1 g* O/ T; q$ c7 i5 q4 U
   _asm xor eax, eax  h& ?9 d$ S  \. Z. @# M. i: A4 J
   _asm mov dx, rdx  ]+ F' a& ^7 m. N
   _asm in ax, dx
& K, I  |! h. v9 C' t9 Y//    _asm mov retData,ax
! u7 d+ r5 C! v+ a' Q, W//    return retData ;
5 n# A1 Y, h. t1 q! Z}
3 W, [) w3 i. I* l5 c+ s
! `8 B" R! n# {2 ^+ ystatic void outp(WORD rdx, int ral)0 _9 K& e' _' M; T1 L# r3 q! y% C
{
+ @. p5 P# @! n; y- m, }- v1 g   _asm mov dx, rdx3 m5 x8 w7 H* e) r1 L, e
   _asm mov eax, ral! Q+ b! z0 t8 ^
   _asm out dx, al
) L' \0 C) H  _- |* F+ i}8 i$ l! `& m( X
/****************************************************************************/
+ s2 C0 y0 z! E3 }: xWORD baseAddress;
9 {+ W6 T8 k# n- K$ K2 n+ wint drive = 0 ;# r7 b2 e) f! u7 q7 k1 e
int al ;+ M/ q3 B$ c2 V) u# l
int al1 ;9 V( ^! H- {- `0 o/ W. f
/****************************************************************************/2 X# O1 t+ _* G, {( P
static int WaitIde()) ]; q5 i8 O* ~9 R* h+ K. I! U
{
+ {0 F& E2 W* _, A& `   int al;9 Q1 r# |5 r+ `( [; l7 f
   al =  0x80 ;$ Z/ v6 U1 y6 y4 X
9 \& A3 [3 z. e" d
   while (  al & 0x80 ) al = inp ( (WORD)(baseAddress+7) ) ;$ E1 u) L3 h* Z4 s+ Y
6 X# H* ^: ^4 t0 A' T
   return al;
7 o" r  N7 P" B/ T}
& t0 v) L; w, O8 _+ v/****************************************************************************/
- v/ y) E( K- `static void ReadIDE()+ ]4 i! b9 B% V7 W
{
; R0 U6 X$ ^0 S* x   int i;
, u3 Q% P8 I* M: G0 a, _; U9 C   switch (drive / 2)4 d7 Q) v" b; ?  G* T$ M. h+ E  S
   {1 X  U9 _; ~; I: b3 ~
       case 0: baseAddress = 0x1f0; break;
/ C% S. q8 O- o% B9 ^       case 1: baseAddress = 0x170; break;0 r5 L1 o8 k5 k% ^- r
       case 2: baseAddress = 0x1e8; break;
2 P! T! f% E3 I3 d       case 3: baseAddress = 0x168; break;
3 s; k9 g( X; Q! t  Z3 b$ B   }
* Q. F3 X4 [  e9 X, \6 W, O8 G0 Z, L0 d
) M! U& l5 G; T   WaitIde();
  [  X1 b3 {$ O8 }   outp((WORD)(baseAddress+6),0xA0);. [7 `; e! a0 @& j
   al = WaitIde();8 o$ a/ d3 z% d
- ^0 j! N# b0 a/ M# a
   if ( 0==(drive%2) && (al&0x50)!=0x50) return;
3 s2 q7 i" i- }7 F9 |5 c   if ( 1==(drive%2) && (al&0x20)!=0x20) return;
) ~* e, m. q- v2 L4 f1 S" i& m+ p3 K: Y3 v8 x
   if ( 0==(drive%2) )
0 M$ \* e# H5 ?       outp((WORD)(baseAddress+6),0xA0);
1 e4 Z$ ^  l& T/ K   else# W! _: O% L  {. |7 [
       outp((WORD)(baseAddress+6),0xB0);0 _. H2 _; h; v9 M

7 o+ A( C" m" ?0 {2 x  G! |5 C   outp((WORD)(baseAddress+7),0xEC);7 O. j7 I* b6 ]7 J: ^
   al1 = WaitIde();
$ x5 n: v& e0 s   if ((al1&0x58)!=0x58) return ;. r9 d- K/ E# S0 r6 W
( T" ~  [% i- @$ b2 b. c( B
   for (i=0;i<256;i++)
* a+ V) G8 P; l& g8 M0 a2 e' J   {
! k+ U) g! h. _9 ^( q. c       pw = inpw(baseAddress);
; A/ z9 J: M$ ^( M   }& w3 b) t& I, w7 d
}
( n, c$ a2 F0 Z* v; Q# c) I( L3 ?
* W! c( N+ b# istatic void __declspec( naked ) NowInRing0()5 b% f' u0 t" O7 K( b
{
% B' G* [3 i2 z- i8 l% Q   _asm1 G# t: v% X" X- a: N( B
   {) y4 z8 f" W# F
       push ebp( B& L( o9 j2 J" B. j+ J
       mov ebp,esp
. e& J2 ~! Y5 n
0 W7 S) X; R# \  m       call ReadIDE
. H% Z1 ^+ H0 q! P# [       cli8 A1 Y0 `- Q- M8 f* s
       mov ebx, int_idt
! W* l# M4 T+ U  E2 `/ @2 ^, d       mov ax, Entry5 `, u) x! w( y
       mov word ptr [ebx-4], ax' t, ~  x* G4 D+ l1 m# g8 y1 a; |) f; {
       mov eax, Base
. g$ L# Z  [* C3 h2 u       shr eax, 16! ~# e9 ?. c+ a, M( V
       mov [ebx+2], ax' g5 d) z' F) B0 r6 H: a& p* ?: J, ~
       sti
) l! h3 y: H- P       leave. o+ t" z  _, i) O2 k
       iretd8 c* i" H. ~$ N+ C! u) `& d- W
   }
0 P- \6 n6 F/ e}
  B% d( N6 a" T" F0 F" x6 S- b, X/ j! h5 K$ V7 M$ E; S
void GetIDEInfo()% i2 j5 _9 L7 M- O2 d
{
$ Z% ]) ~* y5 V2 P; J, |7 u4 X   DWORD dwExcept;
5 t% E( a: y! P3 v. s$ i2 z( ~) V6 B8 {1 d8 H
   dwExcept = (DWORD)NowInRing0;
7 G' N% x* ~0 Q' Y  ]7 f: @# u' Z" c* w  J* e2 a) Z
   _asm
& h; a" }1 E& o5 a) @1 L% |   {
2 Y! c2 U+ }/ g$ I       mov eax, fs:[0]
. }& J/ f  H% q+ k; m! v. Z       push eax
+ L3 h1 I9 ]) l3 y; ?       sidt [esp-02h]8 i. D3 x- @; n! @  Q( ~
       pop ebx
2 K! O  z  T- L) U! k       mov idt, ebx/ W3 g! B" B% F% Y; l' d, {
       add ebx, 0x1C1 c4 {% |# m/ \9 u! q7 F, l& r4 Q$ F- t
       mov int_idt, ebx
& S& U1 `& M- I! b! `7 D( s9 u9 j" W1 b
       mov eax, [ebx]
2 T# _* N7 |6 h       mov [Base], eax
& R- [( ^5 W! c7 O* F  x6 {9 _: {       mov ax, [ebx-4]: F! _/ E# K. }* n$ S
       mov [Entry], ax
/ {+ M. c1 l( A3 k
  T# c) d9 N5 J6 h: s       cli
7 B$ O" h4 W$ l) a( u3 \       mov esi, dwExcept2 [2 Y$ o. u9 K' v+ s  {
       push esi
. M7 \1 |/ X7 [1 f  L* T1 `       mov [ebx-4], si" v) ^: A4 o3 \1 [6 c9 n' Y
       shr esi, 16
, J) [+ u% x) R- p( }2 r       mov [ebx+2], si
7 f" Z7 @+ d& e. \; N6 M  p) j       pop esi; R' C: d0 |( X7 t7 y
       sti
0 h$ |* s! e1 K, G% Y
2 q% @! v5 V* D) H' ]- x4 A       int 3
9 ]4 S0 ~+ h# y- g  G- ?% U3 O3 ?   }% D5 h% r, X. h
}! F( z3 `8 k; |1 `- t+ H% O
int main()
/ U. y! r+ n1 Q8 F{
) M  N( q/ R  I( _5 w4 K) t   char s[80];
, d, x' E! [9 U6 q   register i,j;
9 S$ c6 c2 U& B8 F# Y: l6 b   unsigned long id = 0 ;
) Q$ i& o/ j# U' U- N$ N2 l; l! ~6 Z. E8 ~! b
//特别注意:这段程序不能 Debug
3 ~/ [6 _- n1 K& }& C5 g9 R+ u   for ( drive=0 ; drive<4 ; drive++ )4 i" V& O! Q3 a# s1 U; f
   {
! L4 I$ U& W6 n, [3 |: v8 q       memset ( pw , 0 , 256*sizeof( WORD ) ) ;3 [- j7 j! Z: d: V4 p
       id = 0 ;
5 Z, q: E9 S) C; O       al = 0 ;
5 Q* g/ f* K, v$ P" i' t       al1 = 0 ;
2 J4 r4 c3 Q+ J3 z! U# `* ^       GetIDEInfo();
8 ^, c! @3 y8 f6 d
% W3 x$ R* {8 `$ Z       for (i=0,j=0;i<10;i++)
4 x- ^  a8 F1 j) ]( n       {$ z* b' @- `# X6 h& k
           s[j++]=(char)(pw[10+i]>>8);
: \+ K# K! N' Z' G1 A, E           s[j++]=(char)(pw[10+i]&0xFF);
8 D7 V8 e% D6 X. ?       }& _2 f( G# W+ j# n
       s[j] = 0;/ c8 H& A0 g& u/ C( r0 I% s. e9 n* ^
: L1 T' B- V0 T/ j5 q3 A
//        for (i=0;s;i++)printf("%d,",s);printf("\n");
5 ?1 r# U% u% m  Q3 }# y; g       printf("Serial=%s\n", s);0 i4 R! K8 w' L

7 s% u" R* p/ L; [* R% j& T       for ( i=0 ; s ; i++ )
1 ^( k' B% U# {+ B; z2 j: I4 {( Y       {
) A6 K( L0 t# l3 s/ K; `           if ('-' == s || '/'==s || ' '==s) continue;
) K* t0 ?' H$ q" k           printf ( "%d," , s ) ;
0 M2 I8 }% \! n1 ^, _2 C: O           id *= 40 ;        //10 ;! N: I& H$ Y( R! H1 T
           switch (s)2 v8 c. H' M$ j' u
           {
4 Y! b- O6 J- A/ p# j9 \+ J               case '0': id += 0; break;
4 J9 I! t/ W: ]1 z  C               case '1': id += 1; break;2 j" o5 ^# \5 w- R1 P: g9 q, e
               case '2': id += 2; break;
1 c  u3 `; `, j! C' R8 H& Z               case '3': id += 3; break;
3 B- W+ x! A% Q, r8 g$ Z               case '4': id += 4; break;
9 s5 k5 B( f7 o2 y) N' Z: }' t( o, O               case '5': id += 5; break;
; J- P2 z" e! i, u9 v( p6 c( D" ]. Z               case '6': id += 6; break;( E# S% R/ P" t% Y/ q
               case '7': id += 7; break;
8 Q: C" e/ p/ e# }# ]               case '8': id += 8; break;
4 t7 x! M4 X1 U% Z3 K) \. r               case '9': id += 9; break;
( ?" Z7 B1 {5 G; n2 s" {               case 'a': case 'A': id += 10; break;. ?2 ], X; K# b
               case 'b': case 'B': id += 11; break;
( v  W, a' i9 p$ m8 ^, C8 Z               case 'c': case 'C': id += 12; break;
0 m1 e2 Q8 ~( p, u, B* m               case 'd': case 'D': id += 13; break;' V$ c9 s! s+ M) p% R
               case 'e': case 'E': id += 14; break;
: C, N8 K9 ]. }. O8 a* _               case 'f': case 'F': id += 15; break;
$ Q9 b0 b& K. m8 G/ y6 c               case 'g': case 'G': id += 16; break;  _! h; b, r9 {# l2 b3 p: |2 c
               case 'h': case 'H': id += 17; break;
4 `4 X+ h! g" F: L, o8 t               case 'i': case 'I': id += 18; break;" u8 X) `% {% n9 E- t8 e
               case 'j': case 'J': id += 19; break;2 \! ^! B8 F+ O; h" V% G5 D$ P
               case 'k': case 'K': id += 20; break;; v) [* }9 [. z# G  K& `% x3 Q, ~
               case 'l': case 'L': id += 21; break;
0 ?) k- V' A* a" [) P               case 'm': case 'M': id += 22; break;
$ z" ?: J6 N+ E) D7 S4 c6 X               case 'n': case 'N': id += 23; break;6 ~' ~; r( ^- d- R' T  l' o
               case 'o': case 'O': id += 24; break;
: ], s# k' L9 V1 M+ k, V/ |               case 'p': case ';P': id += 25; break;
( l, W) W, K- H) Z+ m  Y: h5 b               case 'q': case 'Q': id += 26; break;/ N: D; t9 F9 S, k# a6 H
               case 'r': case 'R': id += 27; break;5 E: ], N+ a5 W; k# T6 Z# ^
               case 's': case 'S': id += 28; break;
/ E- M, J" s. f5 l% m! i               case 't': case 'T': id += 29; break;
' o$ \/ @, l% |. q' e               case 'u': case 'U': id += 30; break;' e2 a9 G/ F$ w) R  E
               case 'v': case 'V': id += 31; break;
+ a. C( _3 l$ T( t/ }: i! _               case 'w': case 'W': id += 32; break;+ s/ @2 ]7 B- Q5 g
               case 'x': case 'X': id += 33; break;* G3 F: R3 _0 U# T& X1 j  [
               case 'y': case 'Y': id += 34; break;4 s0 h5 H& \! o% D2 W
               case 'z': case 'Z': id += 35; break;
! m2 W; s$ j1 A. F               default : id /= 40 ;" G4 [: y* y3 o# L
           }; a/ Z) t+ d% \) ]4 w( u: X& q
       }1 p, B8 t: E/ [4 d- s
       if (id > 268435455) id %= 268435456;7 a0 b  @' b4 a4 h
# V( m7 l6 U" @5 ~5 U9 r
//        if ( al1 == 0x58 )
! ^5 n3 @+ B  C* E           printf ( "i=%d ID=%d al=%x,%x\n" , i , id , al , al1 ) ;
) k8 C( ~6 r6 u* T   }4 r; u1 R5 M) h0 ]3 L* Y
   getch () ;
. ], x3 j. R5 w# d1 v* Y   return 0;
& V, F8 M" x, s" N/ F6 l}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 00:29 , Processed in 0.020853 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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