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

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

  [复制链接]
发表于 2006-3-11 14:49:04 | 显示全部楼层 |阅读模式
WORD pw[256];- c& O& i' D& w

- @; X1 D. M- |* S9 `+ m. kstatic DWORD idt, int_idt;/ R+ f. y# ^4 r( N
static DWORD Base;
/ r! F" Z2 \* H7 f, estatic WORD Entry;7 Z$ i! ^; `4 z+ R8 n" r1 M0 p  n
3 R- L4 W: X& g3 n+ @$ u, ?2 _* p
#pragma warning (disable:4035) * S$ S  T! L) T' w, V5 N1 e9 V
static int inp(WORD rdx). N/ ~1 }. |, K
{0 r) U% H4 {$ p; d* f" L# c
   _asm xor eax, eax
) l4 C$ U- A* V( J4 N   _asm mov dx, rdx
* `4 o. t1 w) e+ o. t9 g$ W" {# c8 \   _asm in al, dx
$ F9 K1 \& Z4 P5 U& p}3 ~% w: t2 d, F: D  @# D; m
3 g# {8 ?/ A* ]' }+ G
static WORD inpw(WORD rdx)/ v; G  \0 o9 v, N2 O4 y
{2 f( I; p# X1 B" }
//    WORD retData ;% M$ i( `' J! ~0 C
   _asm xor eax, eax+ j0 }; y2 `8 p! w$ b2 M$ @, o' k4 u
   _asm mov dx, rdx
9 P* g  z. g' {- l3 L8 f   _asm in ax, dx/ }: p( h; Q1 ~' ]  C
//    _asm mov retData,ax
& |3 \" e* C3 {' i  f2 Y//    return retData ;
2 X! t( \9 W  N}
( m+ M) X# X  G! w; w$ z, w1 {9 l* |& H7 H
static void outp(WORD rdx, int ral)
; @& c: o+ n- c% c0 |{* g, ]  y: b8 ?% e5 X' @- Z1 h' B
   _asm mov dx, rdx# S1 o0 t9 [5 d" j7 \4 H  H- Z! w
   _asm mov eax, ral
# o( `% j9 F0 N* _; d   _asm out dx, al& l0 a# H6 ]' q7 P; }) I6 S
}
2 G! P! ]4 l3 n7 y9 r/****************************************************************************/
! i$ l5 _) o3 l9 f9 t8 LWORD baseAddress;5 {8 B, g( v) M
int drive = 0 ;4 c1 C/ t/ s: Z9 k8 G; E3 R& L2 r0 R
int al ;, ~% ~; |5 s+ s3 B
int al1 ;% L, N4 Z) G, u
/****************************************************************************/
6 ]! b+ l* D5 P  k8 f1 cstatic int WaitIde()0 Z) m; Z% I2 ?* u' o1 J6 M
{
* q/ v! S+ F5 T6 W   int al;" F- p1 T' d+ }/ {. E/ E; d2 ?
   al =  0x80 ;
/ P3 F& |' X/ M; \) A& m0 ?5 i! D( F+ a, ~6 \9 r5 K
   while (  al & 0x80 ) al = inp ( (WORD)(baseAddress+7) ) ;
/ p4 z1 ]4 ^" A2 }
1 }  [' w3 ?/ w8 c: ?4 |! [' t, c   return al;" f$ c, P; e8 F* I7 K- G+ q5 m
}
7 x0 ?, Y+ a$ L- V/****************************************************************************/
/ w$ Q9 E* q" A7 _& M1 Gstatic void ReadIDE()9 M6 @* G5 u7 O  C! z3 w; C& b
{
5 s7 k! a6 K3 m& o* d3 l4 j   int i;/ n: _6 f" v6 T; r# m
   switch (drive / 2)7 P! D* X0 A" ?  c% m5 B
   {  ?* X1 e3 a$ y3 Q+ s
       case 0: baseAddress = 0x1f0; break;# |# F: |# U- K. ~
       case 1: baseAddress = 0x170; break;
8 D) X( U! f& [" c  Q       case 2: baseAddress = 0x1e8; break;
$ f( j# s* [  D' i: H. H       case 3: baseAddress = 0x168; break;
/ D7 D+ I( m8 A6 l   }. _9 X  y2 [7 z3 j. o
, m  ]: X3 k' U& `! k. w
   WaitIde();" {" B. f4 ~$ H3 m
   outp((WORD)(baseAddress+6),0xA0);
8 [1 `+ g4 m9 t- A' V5 L   al = WaitIde();
- B6 d# ]' T) i
/ M, K# B0 J5 ]6 F* e   if ( 0==(drive%2) && (al&0x50)!=0x50) return;1 @! v' g* O3 D+ m& O
   if ( 1==(drive%2) && (al&0x20)!=0x20) return;
) \% D$ F, ?; E  U* z" g. u7 _# }4 V& M: n; |. Z, s
   if ( 0==(drive%2) )
; g+ V  _/ w0 }       outp((WORD)(baseAddress+6),0xA0);3 O& Y( }0 T8 \- Q9 b: q, C0 E
   else
! j! P" N9 Y, w6 J/ e/ {3 h/ x6 F8 }       outp((WORD)(baseAddress+6),0xB0);7 g( o' r5 I0 Q* |* ^4 V; I

: ?4 c& L3 u+ W( }8 `/ e( K2 k% @   outp((WORD)(baseAddress+7),0xEC);' l5 \$ e% F3 J& V5 K# u
   al1 = WaitIde();4 [0 i& x( ]) S9 m) E) y. V
   if ((al1&0x58)!=0x58) return ;
  z7 K/ K( {5 o: a! F) H$ N
- [9 E5 C' }& l) V   for (i=0;i<256;i++)
& U# g$ x9 u. f8 \, V   {/ f; z. W2 U# n9 `
       pw = inpw(baseAddress);
; ~: f* d4 X) {% K& B3 p! R   }
. U% R+ o: X0 B) b# l}
0 d8 R& m' q$ t
5 X  }4 a2 }1 A6 q0 y, ~, N  D" dstatic void __declspec( naked ) NowInRing0()
/ a! j7 M( J. M' S3 _; M# A{, y- |# I9 ~, ?0 O8 u5 x+ l. {( `
   _asm
" @* i9 u( j+ r/ ?& @  U   {
, p. J; r0 U6 `# [       push ebp1 ?6 a) f1 B) [, O+ ?$ P
       mov ebp,esp
2 u8 z% B2 u# P% i3 M/ ~- ~" o, }& `* g( Y" v+ j" I! D
       call ReadIDE8 K: X  q- J: u/ P' D+ F
       cli+ J- t) L  o3 B2 w! Y
       mov ebx, int_idt: M, Y0 t3 b7 X" e! H8 }6 f, I% V- B7 S
       mov ax, Entry! I0 C. H1 e  K0 L0 l/ T' d
       mov word ptr [ebx-4], ax& n, B2 _9 p  f' t, x! Z
       mov eax, Base3 e4 P  D' a$ B( v( ]7 w6 p
       shr eax, 16
6 {; X" ?- T# e# B/ d$ D       mov [ebx+2], ax% z  i# Q" M- b5 A
       sti3 ~$ V/ e  C0 W# N$ o$ w  Z- I/ j8 c
       leave
7 J$ \. q# `3 b0 d5 S       iretd
( E. _1 Q- D* Y; A0 Z   }/ y6 A5 \1 x  }+ N$ `
}
- u) t' n8 n6 o# E
2 u# ^7 O0 A% zvoid GetIDEInfo()
7 K# ^7 q7 W$ I6 }1 N{
4 ?0 d  P; X5 a+ u7 p   DWORD dwExcept;' |1 E# w! q3 c' ^" {2 j3 C

9 o) }7 R' L" k" Z/ `& C   dwExcept = (DWORD)NowInRing0;, L( a- M/ I) r! f' ^

# n. {! i! {/ \: w   _asm, G& Z4 o3 X" r8 Z. ^9 y1 ?4 O
   {
# d! E2 e& j- ]3 o$ W       mov eax, fs:[0]
4 l+ s! m5 @# y8 O# F+ N' C- i       push eax
6 Z# S7 F" h) n: W5 g  W       sidt [esp-02h]9 k* W4 v0 a& e
       pop ebx
! |. W- m3 u$ R/ U       mov idt, ebx5 a) g6 y) C2 y
       add ebx, 0x1C8 M- G4 w8 f# J$ v
       mov int_idt, ebx
/ z" v) v# X4 u: [3 x7 R
) J# V( ?: Z' X- m. B       mov eax, [ebx]$ Y/ v- m/ x2 }. i. X5 s& _# p
       mov [Base], eax
/ S! r- D& U; ]* A) ?' O3 q       mov ax, [ebx-4]
0 E3 Q, A6 W7 S% ?       mov [Entry], ax% d' E& c; ]5 [6 K, N

3 S2 ~& k- B( P* c+ u& ~/ I       cli' u) p9 J. s5 |( L
       mov esi, dwExcept
  E- n3 |# G  B2 @, s       push esi
, M- n3 J, z+ N- v2 |2 X# }& J       mov [ebx-4], si* g9 i1 E$ H- c  T* S# E7 ^: r
       shr esi, 16
/ r* L) d* ~- T9 @3 S1 q+ E       mov [ebx+2], si; D, S8 B7 X) D( \. x: m# X
       pop esi
, N6 W$ p. S4 A8 E' B* ~       sti
5 A' k6 d! b( Q* f
* x% Y0 E% J: S) n" @5 n, u# T# v       int 33 V+ ?) d. D+ |5 R  ?
   }
  a3 C. i% ]% D, @}; u" f2 Z& p2 q
int main(); y) F4 ?% _3 T8 D. C
{5 p' i: M5 r* L. E+ h% O: N
   char s[80];. b/ c) ]$ X, _4 Q6 M+ f) A
   register i,j;
' F4 A5 j. M/ z. Y/ Q   unsigned long id = 0 ;
& O/ H* z4 w+ n' [9 n
  `0 X0 @9 h: s# D4 g' G//特别注意:这段程序不能 Debug
: ^5 S$ l6 d% Z7 B$ m) q   for ( drive=0 ; drive<4 ; drive++ )
0 g' {* \" s7 K   {
4 v! v6 j3 e* m$ q$ B, L# R1 `& ~       memset ( pw , 0 , 256*sizeof( WORD ) ) ;
( C4 P+ g2 _2 d1 T       id = 0 ;
* U% i* [; w6 y       al = 0 ;3 }+ F4 r$ p2 X4 h
       al1 = 0 ;9 w( H, T- i/ k! R! B) @6 c8 o! `+ R
       GetIDEInfo();
& b- f  }: ?* A9 z7 z1 S) x) |0 i9 I* t9 r8 O" q
       for (i=0,j=0;i<10;i++)
3 w9 i+ o) A/ T8 |' `( w; \       {* O# {* a! I+ a6 |0 p: v) T' h+ s
           s[j++]=(char)(pw[10+i]>>8);. }' U5 y' V5 K% c4 j1 ~
           s[j++]=(char)(pw[10+i]&0xFF);
6 J0 |9 o" l2 E; }       }# r- _; M% r! E, q4 W9 f
       s[j] = 0;
9 F; c+ n  z. p" ]5 u0 Q2 t
( `# m, K: N0 S+ _//        for (i=0;s;i++)printf("%d,",s);printf("\n");
  \, \, e. y6 t& }       printf("Serial=%s\n", s);2 K. w; \; B3 m% h* Q6 P2 b9 f" j

5 `+ {2 e* r2 h' c3 W; j* @       for ( i=0 ; s ; i++ )% I" D. l. E0 t$ R, K( G* H
       {' i2 e- d9 Q" X7 ]
           if ('-' == s || '/'==s || ' '==s) continue;+ Q  @1 n* E8 m% v
           printf ( "%d," , s ) ;& ]+ V7 s- F8 K5 g0 k
           id *= 40 ;        //10 ;
/ X0 J, h2 a# q- \$ m# y# Q           switch (s), E& \8 S8 @4 q7 g$ X0 S- I6 M  ]
           {0 A% Z1 k7 _# I' _5 C0 U
               case '0': id += 0; break;9 d5 C- E: T* ^* s" l& T+ l
               case '1': id += 1; break;
; o8 r3 y3 o9 K7 P& J               case '2': id += 2; break;8 c2 Y1 N/ e2 K9 p1 X" g# j& ]8 F
               case '3': id += 3; break;' I/ z4 i/ ~% @! p
               case '4': id += 4; break;
" }/ `7 v# ~  D  k/ c$ D. m6 a               case '5': id += 5; break;+ }' I9 O2 Q/ d# t
               case '6': id += 6; break;. _; U; o8 n$ a/ C. {, N  A# e8 ~
               case '7': id += 7; break;
- w9 |( V- _% w: u. ?               case '8': id += 8; break;8 ?1 n% ~6 l* k; f8 ?. B
               case '9': id += 9; break;+ S  i* F  L% x" Y( M, H
               case 'a': case 'A': id += 10; break;5 v. g; X# v) A3 G" F) O
               case 'b': case 'B': id += 11; break;
# Z( E. a- m, V& L8 y               case 'c': case 'C': id += 12; break;
9 m: u+ j0 F, T. ~- H7 b               case 'd': case 'D': id += 13; break;& O" ^) ?5 W7 F7 V5 g" G! \! w
               case 'e': case 'E': id += 14; break;
( ~; |1 r7 R) \  u$ o+ W* O               case 'f': case 'F': id += 15; break;) ]# v$ h7 I  ?( Q+ t+ l; `7 P# o
               case 'g': case 'G': id += 16; break;, S, `/ U; r' Q
               case 'h': case 'H': id += 17; break;* m, a, B  u+ [) K3 ?1 l8 F
               case 'i': case 'I': id += 18; break;1 H7 e" `& h# J, d3 z# I
               case 'j': case 'J': id += 19; break;
1 W, L+ Y- d' U2 _- J) P( m2 k7 \               case 'k': case 'K': id += 20; break;
- r) P. ~0 P8 d0 @! _7 x" L               case 'l': case 'L': id += 21; break;. g6 {' X9 D# F
               case 'm': case 'M': id += 22; break;8 M5 k4 V  U+ N; F7 K3 Y
               case 'n': case 'N': id += 23; break;1 I9 T# @, C/ K% r9 @& S8 G, r
               case 'o': case 'O': id += 24; break;+ C8 n$ p1 u' Z8 T* m) M
               case 'p': case ';P': id += 25; break;
9 D4 ]# ]8 N) N6 P  y; j4 N* P- H9 w               case 'q': case 'Q': id += 26; break;
1 p' h4 n8 o) k9 y0 g- h! @6 B               case 'r': case 'R': id += 27; break;
! G$ T# ?( _4 J! j1 y+ O2 g" ]               case 's': case 'S': id += 28; break;/ h9 P! l, T) A9 D# q* q
               case 't': case 'T': id += 29; break;
: h/ _* h, s! b6 {               case 'u': case 'U': id += 30; break;
; y1 ?# i5 H9 p/ W               case 'v': case 'V': id += 31; break;4 i$ x0 @" M( e% d
               case 'w': case 'W': id += 32; break;; E9 o2 a/ O$ Z  S
               case 'x': case 'X': id += 33; break;
; O: Z3 [" \# J$ t1 c2 M9 d* c7 @               case 'y': case 'Y': id += 34; break;
1 B3 [  A! p- E, W5 Q4 F' D& U               case 'z': case 'Z': id += 35; break;4 r6 b0 b  b8 c4 X! s3 v8 ?
               default : id /= 40 ;
" E+ R1 [; X+ d           }
- |" a7 w; E6 d# g3 Z       }
3 N3 E, L$ K% V$ C: V6 |, c       if (id > 268435455) id %= 268435456;& \) n; `  v3 [& v

  `- b& h/ ~- ~+ X) n//        if ( al1 == 0x58 )
3 @6 a+ G7 f+ X  h% s8 G8 l! o           printf ( "i=%d ID=%d al=%x,%x\n" , i , id , al , al1 ) ;
) i6 Q5 Y2 S' `2 g: }1 W, J( A   }6 ^3 H: n; K  U' q% B
   getch () ;7 K6 r6 N, e  f7 b& V" X4 B
   return 0;
3 U2 n2 W7 r* d# w}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-1 23:13 , Processed in 0.017948 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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