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

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

  [复制链接]
发表于 2006-3-11 14:49:04 | 显示全部楼层 |阅读模式
WORD pw[256];
: e" |, i; W4 H+ X; g! p9 `( C4 v0 S( i* p# `. C" Q; e
static DWORD idt, int_idt;
- z7 D0 M0 @: c9 ^. ystatic DWORD Base;
! ?+ }; |- p* w( S' @; w. bstatic WORD Entry;1 _0 X% Y- q% m: ^7 O% P( @
) K$ H) Q) y6 e, h) _" \
#pragma warning (disable:4035) 2 K5 e! {% Z7 B& F: ?0 s
static int inp(WORD rdx)
: |8 z) d* x* V' |3 t{4 M- k( N. F4 k, l1 J3 e
   _asm xor eax, eax
/ a( w( C0 g+ I2 ]   _asm mov dx, rdx: z6 R9 b# ^6 G, w
   _asm in al, dx) t9 y# A$ d6 d1 {1 Q/ [
}# N* O+ A) M- ^+ v* L2 s; S6 c# K
3 L6 u; J/ e/ m5 \# H6 Z/ n
static WORD inpw(WORD rdx)
/ W6 l* x/ a$ p{+ K0 ^- ^  E7 y; C$ g) a2 Y( r! {
//    WORD retData ;; I" Z+ \# d2 z1 f. A! }! D$ Y
   _asm xor eax, eax4 k1 p2 O( b3 v5 M* B. _
   _asm mov dx, rdx, I) e$ I8 \+ g! `
   _asm in ax, dx/ q$ T$ K. U+ ]% J) H' r2 G
//    _asm mov retData,ax4 w8 `' [% j3 I4 |  q
//    return retData ;
6 Q+ T  C  w. w; ?% @$ F}. i! U4 k* V* w* S% z5 h, d4 M+ j

- I& @- C; A" \8 x0 H$ j8 {, gstatic void outp(WORD rdx, int ral)0 I. i1 B" I# w
{
5 ~& l( C, H; [' {/ }   _asm mov dx, rdx% y3 I) R. f7 z! I8 _4 c
   _asm mov eax, ral
2 K, E7 x. S9 `% ^  L" @   _asm out dx, al
) I+ }( i# P4 B6 V5 F- V+ p( f7 O}( ~) v8 |& \3 v3 B! [
/****************************************************************************/
* J4 z% d5 y: ?WORD baseAddress;9 _  y9 c; v( |2 D& o2 Q5 G  N
int drive = 0 ;8 y5 ~5 l' x/ H: N/ L9 M. K
int al ;
# I; j/ ~; C. x/ ^! U$ Sint al1 ;; M% s. @. y4 J, P
/****************************************************************************/
; v! Q$ ?1 y! J" fstatic int WaitIde()
. ^' N3 I: K/ V7 L' a( s0 |% h{
1 O' J& T" H! f7 s) s) r! D" {   int al;, m9 Z6 C* q) K1 @$ T% _2 e9 M3 T
   al =  0x80 ;
# H. X, D* Z) e2 T: h; O0 \+ F1 u# z9 h: T
   while (  al & 0x80 ) al = inp ( (WORD)(baseAddress+7) ) ;8 ]  m4 l6 ?: {* a) y9 w

- J2 Q+ V% @8 h' a! E( m# v   return al;
2 G1 U4 T( i4 S% H3 {; Z0 {7 j}
8 e! H; E' c* `4 {' I5 C! [, r/****************************************************************************// P" }4 I  N+ ]% n3 s' h- |$ N
static void ReadIDE(): l/ x* S$ e5 g5 ]/ e+ L4 m" B5 f5 x
{6 p: p! Q( U1 _
   int i;
! W3 O' L0 f' |) d   switch (drive / 2)! f  E) {/ z; ^6 w3 \/ Z1 ~
   {. a8 Q( }/ e" \5 W$ J- [
       case 0: baseAddress = 0x1f0; break;
4 l7 b3 S# v: h8 e; S  n4 M0 [       case 1: baseAddress = 0x170; break;
4 E& E, n7 Q& i, G       case 2: baseAddress = 0x1e8; break;. R/ x% O2 |1 u6 Q/ X; B7 R
       case 3: baseAddress = 0x168; break;
! T6 a& u9 x5 f' C5 I   }! Z- ^0 R& G' ]7 J

- O6 E8 \% p9 o   WaitIde();
* ?. ^) ?6 h$ j: ]+ _* n   outp((WORD)(baseAddress+6),0xA0);: z0 ~+ n! v  y/ ~0 A. `
   al = WaitIde();
) h+ |3 l/ S# d4 T* `
2 r/ N8 O. B, Z* y% M   if ( 0==(drive%2) && (al&0x50)!=0x50) return;6 L( o; G5 G; g  w) |" j$ Q" n
   if ( 1==(drive%2) && (al&0x20)!=0x20) return;7 r2 W% O& f& |; W
. g! N- _. K$ A. m/ n0 d0 P
   if ( 0==(drive%2) )
. K# k" H3 I; J9 N) z       outp((WORD)(baseAddress+6),0xA0);; M. `4 l! B7 {. z. o
   else5 h. b' \: {( c
       outp((WORD)(baseAddress+6),0xB0);
! T( U7 ?# ?; ?! l  c# @  ^, v/ U+ ]; x" Y6 ~
   outp((WORD)(baseAddress+7),0xEC);7 M# L+ k: k6 W0 U& S/ D5 ~5 p
   al1 = WaitIde();$ }0 N: b1 O, H& v
   if ((al1&0x58)!=0x58) return ;6 I+ _0 o, f! }0 J( h/ R9 W: o

" X& c8 @/ a5 @   for (i=0;i<256;i++); M* P/ ~2 A; d' t
   {
5 V  r5 z! }+ I% E1 L" w+ p       pw = inpw(baseAddress);
1 H5 w# s2 _  W, `5 g! E2 S   }
$ O6 d* }6 q* q- Y' r}- g" v2 J9 Y5 e7 r/ B
, ^& e/ W) l! X7 B/ ~; ^
static void __declspec( naked ) NowInRing0()! n; u6 {# Z4 T8 L) r) J
{1 F) x; I1 o  U2 g
   _asm
: H. I- }% b# v   {: z1 o+ p3 n7 O7 @
       push ebp* r, q4 i) j/ N4 N: _
       mov ebp,esp3 z1 n( `6 l/ X6 |( Q6 P: C9 S
; l  p7 Q0 [( Q
       call ReadIDE# ~! U9 O: q* E+ |
       cli
3 ^7 b2 u4 A) O  u5 p) D       mov ebx, int_idt4 v4 t6 Y, X& g; b
       mov ax, Entry
, V2 @: F2 L3 n       mov word ptr [ebx-4], ax6 J1 J. \/ a' b9 K! t# D
       mov eax, Base
0 c+ n2 |. Q1 c1 G       shr eax, 16, e% h8 ]3 Z* |/ L: S! B
       mov [ebx+2], ax
! t2 O$ x; J/ n3 i       sti- V8 w. l6 S. Y
       leave" p! I( e* `( y( d0 @. m; o/ b4 N, L7 L
       iretd6 m) D6 T* |; M4 R! P. R* p
   }
& L; I, Q$ T. E2 a}' }, x8 g; b/ G/ m0 ^" c2 @0 P  U
# p6 g% w! }4 ^/ t3 N$ X
void GetIDEInfo()
( s$ ~- G! d: d0 a+ `; y$ E{( N* V* i) E  N6 i8 T, ^
   DWORD dwExcept;* R8 M# W( i0 U; P) Q) X
. e9 N* i6 k* g: Q5 m+ R# z
   dwExcept = (DWORD)NowInRing0;* D0 c; K" I; M1 ?- N0 x5 ~

9 Q, H5 ?6 u: K4 O' M* H$ d   _asm" i1 l. J: ]' W( K' w
   {
" r# N6 G( n6 U2 G8 c; e       mov eax, fs:[0]
2 F1 Z% A4 L7 \0 G       push eax) e  z3 x1 Y, L9 x: \8 @; v. L
       sidt [esp-02h]# ~& [2 k! _7 F7 q# V* J* g' ]
       pop ebx
2 u$ L! \) P& \* ^       mov idt, ebx
6 r6 B" Q+ n$ I" b. g       add ebx, 0x1C
: W# J7 g; r3 ]' ?2 y( A, N       mov int_idt, ebx
3 @4 @9 a) E2 c( h1 y1 ]( \: H/ k3 j
       mov eax, [ebx]
  j+ ^+ T5 I: J* J5 ?$ d       mov [Base], eax  P0 b; [% c# L6 R# t
       mov ax, [ebx-4]' T- d+ E' P7 ?5 d8 m
       mov [Entry], ax6 l- u2 s" c4 R% H3 i
! R- D9 x9 y  i- @0 b
       cli
7 C: L* }0 m* E8 O7 {; i9 w: g       mov esi, dwExcept( @: ~! w$ W7 d. ]$ E5 ~8 A
       push esi$ T8 X* x! s7 O: s
       mov [ebx-4], si
( |. j  |9 g  I( M$ z: k, M: r+ q       shr esi, 16
4 w: C4 K7 o8 F- A; i       mov [ebx+2], si
- A9 g7 j( z: e7 F2 t4 `       pop esi
3 Z( k! f3 e! ~0 b4 A( A       sti
) L: K: T( _/ q# \  B: U9 Y. A* d& R9 r' z7 {& A' _' i
       int 3
* d; J" o0 w/ ?* H6 G   }, C/ F+ N/ w* r+ C" O
}
: |; Z% u/ |  K7 d& O# U# A/ ?int main()
/ a6 Q6 W2 `/ j) c{
" c  |) r" [4 U0 Y  N; G+ l   char s[80];
) k, B# H% B2 f; y   register i,j;( ]" o1 T& n1 d; L7 \5 f4 {2 b( J
   unsigned long id = 0 ;
; ~) K+ |. m4 C/ y/ k" M* F
- C, ~# S  J' L, Z0 R5 y//特别注意:这段程序不能 Debug
4 L. K4 d  @; Q; I( R" i9 R" Z6 ?, p   for ( drive=0 ; drive<4 ; drive++ )
" V8 z  z$ q; k5 e+ R* v( @, C   {+ @, S' F2 [% Q) Z6 M2 j8 q; m; D
       memset ( pw , 0 , 256*sizeof( WORD ) ) ;
- b- [0 x9 z4 y/ H: C% U       id = 0 ;
) k0 c4 D5 @; ]/ ^& \       al = 0 ;
* j, v: p4 s4 o& E7 Y       al1 = 0 ;
# Q) y; w- `  y2 p+ K$ @/ q, x       GetIDEInfo();
  k( N' j: V: x
' v2 h9 D" `. p9 ~  E" j       for (i=0,j=0;i<10;i++)% m1 V: L. V. I
       {7 F3 q/ Y! e$ U
           s[j++]=(char)(pw[10+i]>>8);6 q" s1 I/ r- |! T- [" V% l4 \* j
           s[j++]=(char)(pw[10+i]&0xFF);
  t  s" f4 J* d$ F7 q0 f6 @5 Q; X3 q       }
4 U5 g+ o3 s3 Y       s[j] = 0;
$ P7 t. B1 {$ n: c# K7 n' o1 B8 X9 {+ ^
//        for (i=0;s;i++)printf("%d,",s);printf("\n");
) Z! L% y( |: ?       printf("Serial=%s\n", s);
1 x+ h0 |& y# Q/ c% B" Q4 T/ [9 u; O6 R$ q$ L8 Z
       for ( i=0 ; s ; i++ )
2 n1 B, u( U2 g; c9 w4 K; K/ m       {& m! F+ P6 g: ?0 _
           if ('-' == s || '/'==s || ' '==s) continue;1 m( L' t: o: v( M! f: M
           printf ( "%d," , s ) ;' z% H* u6 V) H3 j$ t
           id *= 40 ;        //10 ;
% @' O* {& T: ^5 D% E' z- T3 J           switch (s)
& m6 I/ R3 F1 d) ~; F3 w6 c           {2 O1 h. w; j7 P' b* H/ X
               case '0': id += 0; break;* D4 t& b0 c# W/ p" W
               case '1': id += 1; break;! Y, E2 p: J$ g/ J6 {& M1 |- u. m
               case '2': id += 2; break;2 e, b5 L# I4 V7 g. e1 @
               case '3': id += 3; break;! _7 T. k6 Q7 N+ z8 d
               case '4': id += 4; break;  b; r$ L* H/ f/ J+ M2 I+ y4 B" J
               case '5': id += 5; break;" k4 Z, }% [- B! v1 {
               case '6': id += 6; break;
4 Z3 C  p, m2 _7 Y4 ^9 I               case '7': id += 7; break;* Y2 p. R; _/ c
               case '8': id += 8; break;
) y5 m$ u% [6 L5 k               case '9': id += 9; break;* q0 v+ W4 J+ V
               case 'a': case 'A': id += 10; break;
! j; W: B0 @' _1 ?4 z' C" i5 z               case 'b': case 'B': id += 11; break;% P6 X* R3 @. C8 n
               case 'c': case 'C': id += 12; break;
6 z+ w: C5 m* O               case 'd': case 'D': id += 13; break;
* {9 S; c8 {% p" `               case 'e': case 'E': id += 14; break;
, Z+ k/ n2 o2 c1 i0 E7 {               case 'f': case 'F': id += 15; break;
! ~) ^9 R- h8 l; F% y, t+ c$ H               case 'g': case 'G': id += 16; break;
, ?0 k$ t: J" T; {1 B1 Q, b               case 'h': case 'H': id += 17; break;3 o( y* ]( X, |) N* [! w
               case 'i': case 'I': id += 18; break;
$ i( q! H, I" t" H3 A/ t: \7 u               case 'j': case 'J': id += 19; break;
: \* }  {6 y( P2 O1 H6 s               case 'k': case 'K': id += 20; break;
8 u6 Q% w2 T9 o7 ^               case 'l': case 'L': id += 21; break;
0 \3 l9 ~# v- H. V/ R' }: h1 f2 B               case 'm': case 'M': id += 22; break;- x* I% Y2 Z4 K; X: y
               case 'n': case 'N': id += 23; break;. ?* a- c- t" H. n7 H) c$ D
               case 'o': case 'O': id += 24; break;
8 F6 P& t( a. ~               case 'p': case ';P': id += 25; break;) |: G* b$ s3 O. p. Z  v
               case 'q': case 'Q': id += 26; break;
' R/ O- Y( d, V1 J4 e9 _               case 'r': case 'R': id += 27; break;& M' H" g  c0 K
               case 's': case 'S': id += 28; break;
0 z. g8 z& }. W# j) u- {6 i. b               case 't': case 'T': id += 29; break;
1 |7 O2 N! ^. S/ P               case 'u': case 'U': id += 30; break;" [: I" U1 r" R! w* }1 X2 T/ w
               case 'v': case 'V': id += 31; break;- m& f$ e  K: G" k  Q2 P/ f
               case 'w': case 'W': id += 32; break;9 X. z1 n" c. m5 s
               case 'x': case 'X': id += 33; break;
% a0 P. G1 ?# i. g               case 'y': case 'Y': id += 34; break;$ Z; y' o8 |; R$ ~- Q' t
               case 'z': case 'Z': id += 35; break;
8 ^: a$ t- Y) H1 ?- ?/ g) `% l               default : id /= 40 ;
; U. V; i; v2 k7 A6 f( T+ f           }
$ N" K3 R: S' C! X4 R6 R( a" i       }
/ Y) Q: F" _; T       if (id > 268435455) id %= 268435456;
5 D& ]2 ^" `" h  _6 o- B
( j$ r+ X. _6 K( P//        if ( al1 == 0x58 )* B& v: \; i1 Y9 f+ @
           printf ( "i=%d ID=%d al=%x,%x\n" , i , id , al , al1 ) ;" R3 p# H' G8 i1 n/ m0 I9 \1 n4 P
   }
* p# Y0 T- Y. b, b/ L' F, m   getch () ;
, @+ q9 c, j( I  T, s9 D* p$ c2 Y1 z   return 0;( m3 @* D7 h# X* _5 D$ f) o8 m
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-13 22:34 , Processed in 0.022170 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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