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

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

  [复制链接]
发表于 2006-3-11 14:49:04 | 显示全部楼层 |阅读模式
WORD pw[256];
1 D1 x8 M5 O( R: ^, A: r, B
! B, a' ]8 I5 _, d, H( Tstatic DWORD idt, int_idt;. d3 p/ _+ {( a& D) T, N) K
static DWORD Base;
4 t# U) @! U0 y4 u. gstatic WORD Entry;
2 t- @# R2 N5 [/ R  y/ W1 |$ G, A: N% Y6 W. P
#pragma warning (disable:4035) % V, d2 u( i: }) o* ?& ?& `$ D
static int inp(WORD rdx)
9 s$ d6 y) ~' P) u0 o# z- M; q{' Z) l- y/ m, o8 p  t8 X
   _asm xor eax, eax6 J8 N$ i; F; Z; X8 ]& p9 \( K
   _asm mov dx, rdx
9 [0 i- O: [1 f( ]0 c   _asm in al, dx
, X8 c4 S9 ^1 u  ]( `. k3 J2 e}
+ T4 |8 R: k, l+ F2 z4 E1 V+ @) ]* M, v- U
static WORD inpw(WORD rdx)0 }! j3 V& Q# ]$ }8 m3 B. a- ~, _
{
" Q  s' l6 X# b9 f+ g5 t# W$ g' q//    WORD retData ;
- x' z! q, Q9 x  E$ i' [% ~+ p   _asm xor eax, eax8 J9 n3 e; H9 \5 B0 I2 |
   _asm mov dx, rdx
8 j" ?5 R1 E( J9 O+ u. K1 S   _asm in ax, dx, @5 _: k' u; X" U
//    _asm mov retData,ax, k4 G/ h5 H- e5 H0 A( j
//    return retData ;
  h* l7 R, ~) Y- J+ c/ i2 c* \9 x5 ~}4 W  i  `! h2 i8 S0 [7 D- ~, l. A
3 D8 F4 J$ |# S9 G) i
static void outp(WORD rdx, int ral)1 R2 e* \4 b7 k1 ^- x
{
1 K% C4 [7 U7 w9 b0 K: j   _asm mov dx, rdx7 c5 V# _7 q! {: q6 T! @0 f
   _asm mov eax, ral
$ r* u2 s$ Q8 {& k   _asm out dx, al
( m( i+ T$ b4 u! }% K' T}
7 e' m* ~5 x8 v  t/ _& o1 ~/****************************************************************************/
! Q$ v$ V. c$ F& LWORD baseAddress;
* S8 R1 `6 i- N3 H9 w, z' nint drive = 0 ;# M! g& m! |  D3 E
int al ;( A& C- B  s9 c
int al1 ;
% K# G% P5 c* X. O/****************************************************************************/
6 n# g) p7 I; L+ f; u2 L6 d' pstatic int WaitIde()
1 m& q/ k' @% {8 Q- _{/ {$ Y) [' i4 S
   int al;
- h: ~* A) F7 a  ^/ @3 ~2 u   al =  0x80 ;3 W6 f) J4 M" X$ Y) w

& D! j0 g2 G0 S" A: Q' l   while (  al & 0x80 ) al = inp ( (WORD)(baseAddress+7) ) ;
. \8 P) T1 @6 F5 G
4 L9 [3 `, u8 c$ k4 ^+ s. Y3 G   return al;- G2 G9 k1 b$ t) Y% D  M5 a: ?; R
}. e# I' R. j) M- }" a( Z
/****************************************************************************/
' G' _! A7 y5 h& [+ I$ Q7 b1 R1 dstatic void ReadIDE()+ S7 {" b3 I0 y/ k4 l& a7 D, T
{# s2 X& v7 M; D/ N7 f. m' j
   int i;
- s% [; `/ ~1 U9 {   switch (drive / 2)3 h$ v3 _# s9 ?/ L- w
   {: y( R9 W( _) l4 C: A8 ^) T
       case 0: baseAddress = 0x1f0; break;
4 O- ?. R* {; N       case 1: baseAddress = 0x170; break;7 g3 p- B3 v1 J; d1 B! M! c
       case 2: baseAddress = 0x1e8; break;
7 {9 |, K( c% ], s" G! I       case 3: baseAddress = 0x168; break;& ^+ D8 o: x" b# n/ @
   }
9 e+ N2 o; j' s3 Q; D: Q* h' P- a+ l* y7 G
   WaitIde();
( _; }/ |6 t" e, a+ A3 o   outp((WORD)(baseAddress+6),0xA0);
+ N; W& }3 U3 P7 c   al = WaitIde();
, ^& j/ l) O( M  v
* F' s% Y" _- H- o" h9 q   if ( 0==(drive%2) && (al&0x50)!=0x50) return;
$ e: |* {8 w( j/ w; ~   if ( 1==(drive%2) && (al&0x20)!=0x20) return;$ d4 S7 ~/ T; H/ Y. `
$ v# Z8 ^+ q) E+ a0 O3 O, c' J
   if ( 0==(drive%2) )
% @  D) ?# l, @- C9 [+ U       outp((WORD)(baseAddress+6),0xA0);
( ^: y. W: E2 |   else4 N* _- N. R- j( y# E* y
       outp((WORD)(baseAddress+6),0xB0);
, E; Y* o" {3 R* {' D% E. z( r8 @1 Y) q: a- G
   outp((WORD)(baseAddress+7),0xEC);
" [. y2 f! w* m. G  g   al1 = WaitIde();
' n; W" k6 r. _2 Y/ }3 O   if ((al1&0x58)!=0x58) return ;
4 ]5 ?/ g- R% w0 i2 Y! B, Z* H  q. w
   for (i=0;i<256;i++)) O# Q: R8 D  F
   {
$ N4 M  C+ E/ X' D# w. \0 ]       pw = inpw(baseAddress);2 p. I7 l7 Q6 s) R" s0 q5 s
   }
6 F9 a* {* @& y/ m}
9 ~& U0 d( @  A  C) ]8 m
* k9 b( Z1 `9 ~! x% e! |) r( E/ `7 Mstatic void __declspec( naked ) NowInRing0()
1 B+ J8 I% ]% Y! m% f- @{0 ~) z& f- |' M& ^9 x, G) P
   _asm1 L! g6 A2 z+ _8 L6 Q
   {# M2 N: M) r/ A) z
       push ebp
5 P! [. Q* n4 u% g5 z9 U/ A$ M       mov ebp,esp# M' Q% R7 s% V9 {" d/ o

1 d+ ?9 p/ D/ l0 e, R       call ReadIDE
: f  T9 ^8 K( R. k) V& M       cli
# }, i$ A; Z0 c' z+ w) d       mov ebx, int_idt
8 _- f' G/ x2 v       mov ax, Entry
$ {3 G0 E1 W/ g& R4 U0 C7 Q! u- V       mov word ptr [ebx-4], ax7 ~0 \6 J3 h- O: r
       mov eax, Base* q! }. q8 B* y4 ?0 a
       shr eax, 16
; f1 N/ E) y& z! s0 L( S       mov [ebx+2], ax' Q* I; b8 y( V0 U$ A/ _
       sti
% Y* O* n# G% [1 P1 E       leave4 {5 z4 F1 O8 y
       iretd
2 v, @* F; l6 @/ I   }
: I- v8 t# y) k( l! v}" W- T% v# l- X  W0 u9 i
- V" W- o% p  X5 m$ x
void GetIDEInfo()
: |/ O  N- S4 _$ |{" E; l+ K5 k( `' R! o- A
   DWORD dwExcept;+ N: I7 N4 [% P

7 K2 h2 O$ u* g9 k* U/ j   dwExcept = (DWORD)NowInRing0;
: h1 H6 G! u$ o; J3 N) v; }' l0 A+ X. S2 v; g7 y. t
   _asm
% q# D+ [. M( E, Y   {
% C- X9 }, T# V4 n' `       mov eax, fs:[0]. U6 q6 h- v" c  k! p% r, S
       push eax
; [' ^: {7 N0 ~; S5 W. l       sidt [esp-02h]
: E4 m! q  U# h0 D1 P! A! ~       pop ebx
) J. l# C% S( x$ w/ m       mov idt, ebx
, X/ v  |' s: V' o% V4 @/ P       add ebx, 0x1C& k2 ?! z* k' w& O9 m0 p6 A$ ~
       mov int_idt, ebx% _1 R  e0 n9 [2 O

7 Z, u. t# k, e7 O$ Y' `$ A: I, o/ ~       mov eax, [ebx]/ ?+ A3 D0 q' g4 V$ u
       mov [Base], eax# a. B7 }0 ~: d7 r; i
       mov ax, [ebx-4]
& w& F1 f% R; s6 u9 q' p       mov [Entry], ax
3 k% Q9 @  j$ ~6 u8 u
, d) J0 U" ?) B- m1 t! ~% ~3 [       cli
; s  @& W" q1 n8 ~" Y7 {6 b1 m       mov esi, dwExcept; b6 @6 j8 I* D  \" P3 }
       push esi; B5 T& `+ ]$ N4 O
       mov [ebx-4], si% ~: }: \. _7 o1 G* L# a6 C' B2 e
       shr esi, 16
2 [0 _' _3 d# _! ^# ~( ?       mov [ebx+2], si2 A, i. j- N2 g. C
       pop esi9 X+ q- p- |7 s/ Q
       sti7 {1 |  M+ F5 g# k
( g* f- M2 l8 V+ q* ~( N5 K7 ?& D
       int 3
, A. a9 a' A2 q% e& p  h   }
& o# K& p3 R' O% _) @' }: g* B5 H}
' `5 G+ ?1 N3 ]3 z9 l  |$ k- Yint main()1 M4 Z+ ], S, `
{
& p6 H+ f! d( Z6 v3 _   char s[80];3 `  `1 w0 g9 j; }
   register i,j;
( ]6 \# E0 r/ `. {7 R/ w   unsigned long id = 0 ;( o1 ]7 G. u- Z& w: T: S
5 K3 L! @, k0 X+ E" j$ |
//特别注意:这段程序不能 Debug
4 D; n; }3 b5 m: ~% p. o/ W0 }   for ( drive=0 ; drive<4 ; drive++ )! `& |" Y9 R6 Z* G* T% W1 x
   {% l2 ?# d# D& C& H9 b
       memset ( pw , 0 , 256*sizeof( WORD ) ) ;6 G0 D* k# H) r9 o8 z- U
       id = 0 ;
- `1 [# X( C4 I* a' _  k       al = 0 ;
/ J* _% D& |# u; G% e9 N. g7 ?       al1 = 0 ;
/ p9 S/ m; u* l5 f! y' `% d       GetIDEInfo();
: o8 K1 X! y+ p
, V1 q& R5 B+ ]! g       for (i=0,j=0;i<10;i++)
; K4 V% P; t! Y# P* G  R       {; a( Y9 l, O2 u) `8 l6 N4 b
           s[j++]=(char)(pw[10+i]>>8);
- J8 a/ K1 ]  i/ X: i- O; f$ u           s[j++]=(char)(pw[10+i]&0xFF);
$ o# `7 H! `2 e4 ~  x! M. D       }7 Q8 i5 _" W9 n! [3 T  t
       s[j] = 0;2 p8 D& F2 c; R9 j! A- P. `- G+ T

. w% ^) b6 z5 E6 O  l//        for (i=0;s;i++)printf("%d,",s);printf("\n");% c* X* o- H  c8 d8 z  X
       printf("Serial=%s\n", s);0 j5 N" {( t) l: k
- h6 V( z4 c4 Z$ q4 M( {
       for ( i=0 ; s ; i++ )
& G' I) ~, T* [, F2 |4 ?: ]7 ]0 Y7 a$ g       {0 S" G: Z' b- X% L* M
           if ('-' == s || '/'==s || ' '==s) continue;2 E' D6 U( A9 P$ x- U9 U- L
           printf ( "%d," , s ) ;* n* U5 @/ q2 @9 Z
           id *= 40 ;        //10 ;
! C- P' ^: D. D, t6 M( o+ k! {: J  e           switch (s)
8 U8 T) v' c. z6 b% {, r           {. [% d: a7 |. Q4 f' q2 \. ~
               case '0': id += 0; break;
4 }5 U* H7 {8 A) I& E               case '1': id += 1; break;* |* t( e4 J% a2 X2 b
               case '2': id += 2; break;
& g( i; B6 T2 g7 P$ B8 g& W( Q               case '3': id += 3; break;
+ ]+ X* _" i2 |( e" u4 Z  Y               case '4': id += 4; break;: t0 x0 p/ R1 \# \4 Z* ?
               case '5': id += 5; break;
% B1 \9 N0 R9 ?; [, ?2 T               case '6': id += 6; break;. [- v0 W! H4 v- `. z
               case '7': id += 7; break;
( A" A- G3 w- ~# j4 u$ }               case '8': id += 8; break;0 J$ k+ s0 C) O/ U
               case '9': id += 9; break;6 O3 }1 V* D" L; t# z* }$ f, [
               case 'a': case 'A': id += 10; break;" {; q. {% D$ g3 z; T$ V
               case 'b': case 'B': id += 11; break;1 V9 _/ k' e5 y
               case 'c': case 'C': id += 12; break;
! f+ n1 A  g* `2 S               case 'd': case 'D': id += 13; break;
5 E. A* A- ~. C. Z               case 'e': case 'E': id += 14; break;
: j; X* V1 Z; Y, A* ^3 M               case 'f': case 'F': id += 15; break;
1 I' s7 U2 B- n4 u2 p* Q               case 'g': case 'G': id += 16; break;/ }, z9 e4 u3 g% c7 \+ d3 j6 y+ C
               case 'h': case 'H': id += 17; break;/ f- P. }* h5 v  t) H5 V
               case 'i': case 'I': id += 18; break;
( p* O/ B& a1 ~2 ^& n. U1 r               case 'j': case 'J': id += 19; break;) u1 K$ y2 z  S5 g: K% `) V7 }* l
               case 'k': case 'K': id += 20; break;
5 V  q# s  N6 n* t               case 'l': case 'L': id += 21; break;
! \$ G6 j9 s" V6 R               case 'm': case 'M': id += 22; break;
% B- X  n2 b' }( V7 ~; ^               case 'n': case 'N': id += 23; break;# F& g. G8 w& {
               case 'o': case 'O': id += 24; break;/ K0 c6 y* B+ j& P& H
               case 'p': case ';P': id += 25; break;& b$ C' e2 R9 ?3 o
               case 'q': case 'Q': id += 26; break;- A; s8 N  c3 L) P! G6 i) G7 X
               case 'r': case 'R': id += 27; break;$ R0 {! z2 D0 J! X( Y, t: N
               case 's': case 'S': id += 28; break;* Z# h! h6 b  n9 @. Z( t
               case 't': case 'T': id += 29; break;
8 y, x) Q% ^7 b# y' `2 d! e. [               case 'u': case 'U': id += 30; break;
4 z8 j8 |7 f9 a& R; c" N               case 'v': case 'V': id += 31; break;
1 s. c3 {; A1 B, z- _, E               case 'w': case 'W': id += 32; break;3 p. W( i* n  o4 b9 A2 ^! ]' I7 w
               case 'x': case 'X': id += 33; break;
  r: e1 d) b5 J; o) H, t" n               case 'y': case 'Y': id += 34; break;" k3 w5 J8 N% S6 p) j, T) M6 J7 i
               case 'z': case 'Z': id += 35; break;
- c1 d7 Q% Q% @- ~               default : id /= 40 ;) v( A) N1 I9 c
           }& ?7 Z  D- A/ U1 N: d6 I
       }
6 Q7 y% D/ S- |. J3 |       if (id > 268435455) id %= 268435456;
+ O4 o" _. L- ~! w- ~8 @! R3 x. w) b% V2 k' E1 f
//        if ( al1 == 0x58 )* y7 |( _9 n1 U6 g  d
           printf ( "i=%d ID=%d al=%x,%x\n" , i , id , al , al1 ) ;
* J1 e$ v* C! d3 ]! n   }! V, a2 ~  H/ Z+ `
   getch () ;5 f2 j  E9 p) s, [% l. l, o
   return 0;% w( i/ ~# m) \# x# k0 ~; [( K
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 07:10 , Processed in 0.034719 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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