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

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

  [复制链接]
发表于 2006-3-11 14:49:04 | 显示全部楼层 |阅读模式
WORD pw[256];6 Z; T& P8 o7 u" z9 n& _3 f

  G2 l7 z  e) w8 I5 U) vstatic DWORD idt, int_idt;1 p: k, m5 G# l% N& F
static DWORD Base;
: x* I4 Q- g6 g  ustatic WORD Entry;
. R1 L. S  \; Z# u2 k' H7 A' ]% O5 Q- s+ g) G" j0 {( W  `4 z
#pragma warning (disable:4035) 7 I0 u. `/ K# U5 [& x
static int inp(WORD rdx)
4 d/ R; R; U1 z( U4 ]' t{
. I) v3 x4 U6 A/ m   _asm xor eax, eax  E$ d' R7 Y3 f, G! I3 ~
   _asm mov dx, rdx
7 _9 v) }: S  H5 b. B1 y1 k+ K7 f   _asm in al, dx" V( @8 |% n1 X7 M4 c9 a! w
}6 f4 [# N, [$ _
+ k7 ]& A1 |: {" Q
static WORD inpw(WORD rdx)
/ E" \; ?( {: R  C3 e( e3 N! ?{
0 W- [2 M' n1 p& f- A//    WORD retData ;6 w3 b* K& q- }( X( R
   _asm xor eax, eax
  e. w- c3 ^( L; Q   _asm mov dx, rdx) o7 q! k) l+ Y# {6 [3 E* X! r
   _asm in ax, dx
. @- H% a+ F, c1 K# _, y//    _asm mov retData,ax# i2 T$ I  }$ B/ f
//    return retData ;8 N. L, o$ `6 J
}
9 g( _+ c- F: v$ _9 O( P  w! E- M# K' ]" t( |
static void outp(WORD rdx, int ral)& S* I2 Y! `9 G6 t, k) V9 Q; m. w' h
{3 w8 o, l5 ^0 c% N
   _asm mov dx, rdx
/ J& c+ Z$ j& @. Z  H0 Q   _asm mov eax, ral$ W6 A# G1 G) V  w7 p# L
   _asm out dx, al1 Q3 E) H+ Q  o  X/ m) ^
}
' N1 J9 z( q5 T1 {/****************************************************************************/
' a: X3 J, X3 u) }- z5 f$ L9 rWORD baseAddress;
6 g! E2 m. e) B$ z  V% |int drive = 0 ;
$ \$ o1 e$ a% B. k8 ?+ f, \int al ;6 L& G/ @) }& G6 `7 [
int al1 ;
! a3 r) c6 |/ t* l3 K% p/****************************************************************************/
/ i: ?# B% y- L: {3 y! n& s# q! Nstatic int WaitIde()* t- a) l% e: k: {
{" x" b" b( J) y! _/ ~
   int al;
3 I& r+ `6 z- M/ w   al =  0x80 ;2 O2 T6 {# N; p6 N' ^
8 n) E+ p9 B& g6 t# u) U
   while (  al & 0x80 ) al = inp ( (WORD)(baseAddress+7) ) ;
7 |8 Q0 o" X0 H9 f6 v/ k" C0 K1 S
# p  K. M9 o+ l   return al;! @4 v, ~8 n; u1 O6 W7 w' G0 m
}& H7 \$ z$ L8 ~: `  U* d1 ^
/****************************************************************************/
$ t+ e8 [( H- bstatic void ReadIDE()
- j" w' U; c: ^; e' z7 W{
0 `0 h% n* X3 }2 P   int i;
$ a. P, \. w' r   switch (drive / 2)3 }1 ~3 L! L/ D$ I) v. `) \; m( n
   {% y7 E6 L/ D! w' \; `
       case 0: baseAddress = 0x1f0; break;* |9 n2 v( z* s
       case 1: baseAddress = 0x170; break;: q3 z, C9 z# @; V: a2 f
       case 2: baseAddress = 0x1e8; break;9 c+ n8 ]( y6 l, |) z) ]
       case 3: baseAddress = 0x168; break;
1 c; M+ ?. E7 r/ E; D   }
+ _, {' c6 n2 ^) G1 t$ p
1 s5 w0 `# C5 P( x/ k8 o+ I   WaitIde();
! c9 }% M1 s) f* d9 B/ ?7 q   outp((WORD)(baseAddress+6),0xA0);( ~- w; Y2 l' f0 D3 E
   al = WaitIde();
! _4 B; o# O8 k" u; t7 y
( z. _' A# T  ]6 w$ {6 W   if ( 0==(drive%2) && (al&0x50)!=0x50) return;4 g) n2 O& z: c9 q3 X
   if ( 1==(drive%2) && (al&0x20)!=0x20) return;
+ W7 E0 p* k$ c1 a  a7 ]
) {6 h9 B% e9 N* _# x   if ( 0==(drive%2) )
4 Z4 o- h2 C. |       outp((WORD)(baseAddress+6),0xA0);
1 C( }! J+ l. W& s- m& L   else
8 _  K; d- N* N% r5 G7 Y9 q- B       outp((WORD)(baseAddress+6),0xB0);' I6 ^' C4 g& |. [# ^

7 I" a/ [2 S" d3 I; w  v   outp((WORD)(baseAddress+7),0xEC);
" r( c! C3 ^1 i$ N* u   al1 = WaitIde();1 R" c, `$ k! m! U5 M8 u0 V
   if ((al1&0x58)!=0x58) return ;7 G, J8 m9 o, _. o. `& q: E" d/ h8 O
7 N9 n2 P" u+ ~. l
   for (i=0;i<256;i++)
# j7 w  `% `2 Q: {+ S4 g! Z   {
2 i  U$ M& ~7 g( d       pw = inpw(baseAddress);" a  ]; L8 Z3 N4 `
   }& |3 w( G) h& X
}
7 g) ]) F/ }0 h+ T# c8 K% {6 o2 d$ f, d/ a8 g+ G2 T
static void __declspec( naked ) NowInRing0()
, d* V5 K: S' p- R4 N{5 U1 n0 s: X" A' g
   _asm7 I+ E3 w% {" v
   {- S) ]$ d+ C' \5 Q6 ?3 I
       push ebp
- F$ C+ i9 Q1 O0 {0 @" ~       mov ebp,esp# n# Y0 G8 Z! T& R# x: {7 F% L
2 G  p8 L  _4 V# h
       call ReadIDE" p; x8 ^  f: Y# v$ G. Z: d! v4 o
       cli
* \& x6 R, u4 L/ o6 ^0 p       mov ebx, int_idt( h6 l9 b5 J( @  o
       mov ax, Entry
  z& ~0 s7 ?: _! {+ a       mov word ptr [ebx-4], ax
  [: ]6 r( c8 G0 G4 F# q" ^       mov eax, Base3 A0 x5 b3 d1 Z; B! b7 m
       shr eax, 16: y) @- w. }' ]  i5 V
       mov [ebx+2], ax
# ^6 P  }# I8 I) l4 T) ]       sti0 Y" t1 _" {& P' K3 v7 U
       leave
3 @' b# }% i: R+ a) @! d       iretd
: H* }# r7 \+ F7 `2 E0 z7 f2 m8 E; V" d   }
! o2 n: J7 R* b0 b}
. d4 c/ k: a( P5 R8 T  p* h' D* a2 y
void GetIDEInfo()2 Y3 Q- Z+ }4 R6 {( U# v: B
{& D+ B" E% _- Y8 _
   DWORD dwExcept;
) J( I' R: H" ^1 j& D8 b- C) P
* @+ F, Y5 n% p   dwExcept = (DWORD)NowInRing0;$ ?% o) ~6 O6 j2 A% X8 C1 V2 J' @' Y
" @% N5 s3 i7 r* l( L
   _asm5 }3 U; n: X3 R4 P9 V0 A
   {
- ]5 I0 g' M* S       mov eax, fs:[0]0 b; y" A1 _- j0 \8 W
       push eax" I6 O7 U5 Y1 b3 |2 T# G+ E3 b
       sidt [esp-02h]. i* S5 A$ U7 h) i( q
       pop ebx
2 ~/ T* c7 Q; r# g& W+ z% b/ i' Y       mov idt, ebx% m8 V* p0 X, Z+ J( `
       add ebx, 0x1C
0 F7 Z( P9 U0 G$ X' c" A; ~       mov int_idt, ebx
* C+ C$ o5 |. @  {' o
5 I% @9 ~4 I6 l* I# I$ }" a       mov eax, [ebx]; N+ k$ f% z2 C7 |* ~
       mov [Base], eax% ~5 d5 u5 r7 j% u5 |5 S
       mov ax, [ebx-4]
7 ~/ T7 k* u  s6 I& x$ ?       mov [Entry], ax
$ l; |. n- o6 L1 W0 {- M, E$ _9 d! H7 ]& D
       cli
  G; n. M3 p/ D/ U1 `) S1 m       mov esi, dwExcept: C  ~' d, E8 e  y! @
       push esi
" c* `  W) o; g( h6 T       mov [ebx-4], si) o9 [( |" e, i/ o8 V* s% ^' o! b
       shr esi, 161 `( C  b* F2 \
       mov [ebx+2], si
& S% c9 v- I6 _       pop esi
; \! I5 D1 |. @( R' {- Q       sti" W9 S7 E7 j2 t  U

- V; a6 h8 S# j& j. `6 \# `' L1 M       int 3
3 f2 L% A  j0 h! t   }6 M( _2 M. d- a% e7 ]9 j
}- D1 ?/ g' ^0 w7 d1 W2 g" U
int main()) M) t# H# t4 J& t% Y+ `+ y
{
% T$ ]) W) d5 A5 u( ~   char s[80];
4 U3 w$ D0 J0 G$ U3 C! H8 i! D   register i,j;
2 q  W  I5 M3 R' Y+ s   unsigned long id = 0 ;4 t* F: o- Q' B( H! a7 c1 q( g/ o

: P% Z3 M  [+ ]7 E3 j; Z! s//特别注意:这段程序不能 Debug) b+ H( X$ o/ Q3 G9 y
   for ( drive=0 ; drive<4 ; drive++ )1 q5 S$ n4 ?3 N+ p
   {( V  X; d6 l3 M. T% {3 Q
       memset ( pw , 0 , 256*sizeof( WORD ) ) ;- L, d' n4 H4 n  n# Z; _- G  m
       id = 0 ;0 X4 l# v2 [9 Q3 L6 G# F0 M2 K
       al = 0 ;! |, _# n& w& n4 k1 }, s# {
       al1 = 0 ;
# r. g+ J: c9 R3 K" N       GetIDEInfo();
; i7 M" f4 D4 h4 c, M6 d) I7 ^6 \* U$ g
       for (i=0,j=0;i<10;i++)5 B$ Q# l7 c) O8 T
       {0 a6 K! p+ ~' ~: f* Y8 `$ n3 l1 z
           s[j++]=(char)(pw[10+i]>>8);+ [# h( Q! ^2 I6 E; N! \# Z- k0 l6 W
           s[j++]=(char)(pw[10+i]&0xFF);+ t# H( ^7 Y6 \- v% C
       }( X4 p9 Z8 |' ^) I9 D
       s[j] = 0;; d) e; l" |8 g: |& {) ^- e

# ?4 J% U  ^- I//        for (i=0;s;i++)printf("%d,",s);printf("\n");7 \2 V; g% \( L' z$ J8 s  F
       printf("Serial=%s\n", s);  G& o) D8 D3 G( e& O

4 ]0 P( ]; n" h) g" D& \       for ( i=0 ; s ; i++ )
; P  @/ `7 L9 b1 O. z# i       {# Y! i4 B; h$ X7 u' O5 z' s
           if ('-' == s || '/'==s || ' '==s) continue;
2 B& _& f$ Q5 i2 x           printf ( "%d," , s ) ;1 K7 W% W; R/ r9 U5 ~: h1 ^7 L
           id *= 40 ;        //10 ;/ E+ E9 @# x7 N5 ^/ \! C
           switch (s)9 @* _0 D# e3 w6 }  u  Z' @3 `; }5 \
           {
" y0 D- q4 E3 J3 E  h& o               case '0': id += 0; break;1 B6 ~: k1 s! O/ s; {
               case '1': id += 1; break;0 f- n  y! {9 \9 {, N
               case '2': id += 2; break;
7 W2 K( j* X) U+ P               case '3': id += 3; break;
" e; _& M, r" W" b               case '4': id += 4; break;% M+ z3 p- p* L- ~/ N- z) J
               case '5': id += 5; break;0 E5 x  _0 k+ l+ P
               case '6': id += 6; break;
+ z& j: S2 O* s- S- Q8 X) W- o9 O               case '7': id += 7; break;  m3 @! @: O3 @8 I
               case '8': id += 8; break;  K% s$ u! {) u" a0 Y
               case '9': id += 9; break;
, S% M. h, M3 K  j4 L7 Q               case 'a': case 'A': id += 10; break;- }; }3 m: n' `, J
               case 'b': case 'B': id += 11; break;! p# N7 }, m# z) o* m' I7 m
               case 'c': case 'C': id += 12; break;
5 o/ O7 ^6 r) B+ m* j+ V( N               case 'd': case 'D': id += 13; break;
- j/ b7 ?3 g' P5 t: Z               case 'e': case 'E': id += 14; break;
2 L/ |$ O- s* p4 p/ n# P9 d               case 'f': case 'F': id += 15; break;# l4 |5 m9 m6 F0 A: q
               case 'g': case 'G': id += 16; break;7 y- _: v! q5 J* f. U/ g* s, E
               case 'h': case 'H': id += 17; break;
  J+ V4 m6 D4 E4 I( M" @7 z/ p               case 'i': case 'I': id += 18; break;
3 B$ b) s5 V  h  E3 \  F  n1 Q( p               case 'j': case 'J': id += 19; break;
# x+ E! s! H/ o1 M5 a) s               case 'k': case 'K': id += 20; break;6 [9 o$ [( J# y) A
               case 'l': case 'L': id += 21; break;! s1 m$ H' O+ L) C& D# r& `! \
               case 'm': case 'M': id += 22; break;8 s* K/ x0 G+ C+ s5 J
               case 'n': case 'N': id += 23; break;1 t' k( @, C4 g3 o# @
               case 'o': case 'O': id += 24; break;5 W1 A# u! W' i! Z5 [5 Z( O1 a
               case 'p': case ';P': id += 25; break;! q  k1 Z  \1 _
               case 'q': case 'Q': id += 26; break;
2 _4 l$ @* f/ I2 Z& h               case 'r': case 'R': id += 27; break;
# n# u/ G. U% B- {* _               case 's': case 'S': id += 28; break;1 u$ a# ~" q, c6 q
               case 't': case 'T': id += 29; break;
# v/ v* w# A8 Q2 S5 j) f               case 'u': case 'U': id += 30; break;
% e8 n, C$ |& i( f, q               case 'v': case 'V': id += 31; break;
1 R' ?$ C; o, t2 _               case 'w': case 'W': id += 32; break;( A8 G# G/ A; v! J9 g( B( Z
               case 'x': case 'X': id += 33; break;6 }' [! O" T7 \! D8 X
               case 'y': case 'Y': id += 34; break;9 t+ m8 U: i7 M- ^, R9 y( E
               case 'z': case 'Z': id += 35; break;* c  Y6 `) Q- H. x4 _. t8 @
               default : id /= 40 ;' z1 Y$ V. ~3 |! }" a) a2 w
           }
$ [7 M* o& J6 [3 s# |       }2 J" }# \5 R* k0 O2 _
       if (id > 268435455) id %= 268435456;
8 w4 [& t* m2 W  O1 v' a
4 f, M' O/ @! n: P//        if ( al1 == 0x58 )
1 B5 ~& u7 x2 P1 p2 W' p$ x           printf ( "i=%d ID=%d al=%x,%x\n" , i , id , al , al1 ) ;+ ^8 p+ }' ~# D9 S9 D# B
   }
% U8 F% z& F8 i% @2 E7 @4 h   getch () ;; H8 i1 y# [1 ~1 a: U
   return 0;4 T) }& @5 q5 s1 T
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 11:51 , Processed in 0.017779 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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