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

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

  [复制链接]
发表于 2006-3-11 14:49:04 | 显示全部楼层 |阅读模式
WORD pw[256];+ U1 f" h8 W, [3 r9 Y/ P) Q
6 }) m4 b- \, Y- C2 {) v4 t2 d
static DWORD idt, int_idt;( [, K/ q4 t4 v. Y% W7 e1 E
static DWORD Base;
1 Q' f, K0 k! Qstatic WORD Entry;& H( n1 K7 W6 j. F! L
0 p6 A6 @8 h: o- i
#pragma warning (disable:4035)
. z6 l. {- p+ Fstatic int inp(WORD rdx)$ h6 f" m% Q+ A( Z
{; O$ A$ l9 x$ k7 u2 Q
   _asm xor eax, eax' j" N! L# ?* n
   _asm mov dx, rdx
8 ?9 l6 P+ H2 l/ t+ ^   _asm in al, dx
! _. z# k# h' c: @; e' Y}
! R- F: `6 B4 M" E8 ]. x: Z' V- I4 c
9 |1 |3 S# Y- ~: M" D& h3 E1 E6 Vstatic WORD inpw(WORD rdx)" N# R7 O' B) r# U! s5 A4 k$ L
{7 S" `" N# w/ {! f* R3 [, [
//    WORD retData ;
; b2 y/ w& I4 v% o* z7 T   _asm xor eax, eax
1 [! Z2 h* D8 W6 h   _asm mov dx, rdx0 R% Z/ X1 s* P: m" Q! d
   _asm in ax, dx- \/ D& S' x8 O# {: t* x( a
//    _asm mov retData,ax4 N" I. v4 V* r2 F3 E3 P/ X
//    return retData ;  e2 }4 Y4 W' ]7 z9 u3 x4 E& S( e
}/ h! I0 Z* ~+ g" @3 ^& c1 ]1 L0 J& z
+ ~! e6 l& i* i0 o
static void outp(WORD rdx, int ral)
. T+ W4 D1 K! h& r! E{2 w: @, c- L' E7 B% o
   _asm mov dx, rdx0 \8 Y) ^: R. ~3 I- O( N0 Z4 n
   _asm mov eax, ral0 `: f8 i9 U, l0 w# b
   _asm out dx, al
- G2 _3 [1 W: H}! ?; }5 Q% K$ S5 g, u# Z
/****************************************************************************/
- x& z* k* l& m' DWORD baseAddress;
$ S! h( T( D" C1 p1 lint drive = 0 ;
/ D" w1 Q' z* y* [4 J5 Mint al ;) f! i) e' e; l
int al1 ;* F/ G0 b  \4 z* p; n
/****************************************************************************/
! E/ l, V/ R- {: i2 @  g. e0 Gstatic int WaitIde()5 P4 F' N! J8 E  [* E' w* q
{+ x; I, P* ?5 ~1 c
   int al;0 a) E% _' I1 x) q* U, }$ S
   al =  0x80 ;
% \: ?% q9 @- V6 h
, |5 r% ~- @, t3 n% b   while (  al & 0x80 ) al = inp ( (WORD)(baseAddress+7) ) ;) \- Q# p6 ?8 a. T
8 N5 n! X5 A4 P, t
   return al;
7 c6 W! ~# ?: c; B$ Y( P" q+ ~+ S+ F}( w2 S! c- O& D6 l
/****************************************************************************/  O; E, l1 @2 q! x, z
static void ReadIDE()' H( L: F! i) \8 Z& O* Y6 A! E# ?8 `
{+ F$ p& S0 w- Q" C& x& I4 u
   int i;, s, \* i2 K. v
   switch (drive / 2)1 J( F' A* p) \
   {
: ~4 b3 \: k8 G7 J% b       case 0: baseAddress = 0x1f0; break;
" Q8 Z9 n: ]% h       case 1: baseAddress = 0x170; break;4 S) c8 W/ O8 M) s* t9 s
       case 2: baseAddress = 0x1e8; break;
& v2 p7 _* F' Y3 y. U( N       case 3: baseAddress = 0x168; break;
% {6 d- x0 |9 j" v) }   }
: r$ g: E2 u( `& L
6 r9 a" a. |# H6 t. P   WaitIde();
) X  s1 K9 T" m* Z   outp((WORD)(baseAddress+6),0xA0);
  K& E2 Z8 a% z8 W   al = WaitIde();
4 h5 {" e! ?% H* d6 B$ G0 O+ O. r% N& Z+ s' O% ?
   if ( 0==(drive%2) && (al&0x50)!=0x50) return;/ z1 a! I& U7 u+ e
   if ( 1==(drive%2) && (al&0x20)!=0x20) return;/ U, b3 l* [  d+ D; O
6 h! V: H5 m% D5 G
   if ( 0==(drive%2) )7 u9 g" H; g8 U7 n3 [& M1 w6 O
       outp((WORD)(baseAddress+6),0xA0);/ x/ @0 _9 P9 Y/ d* K( F2 }, u8 p
   else
  q$ C$ C+ b# l& p3 ?* w       outp((WORD)(baseAddress+6),0xB0);3 u/ [9 H. {$ J
& A) Q5 d1 [5 o  N7 W" w) o1 T( W
   outp((WORD)(baseAddress+7),0xEC);- y1 ]9 I( n: h6 I9 q
   al1 = WaitIde();
7 @" j' e' z! b+ V  W- v9 {8 @   if ((al1&0x58)!=0x58) return ;
6 L( _9 H- O9 h: K2 w
5 W, s% P% E0 N9 }   for (i=0;i<256;i++)1 z; s4 F" v6 ]  C7 r
   {
5 j! q4 {/ p. [! C       pw = inpw(baseAddress);
: |  f& z" y5 R" B   }$ O7 K% l' z' \. g+ t& k; `. T
}! Y, w6 w4 c1 p

3 Q0 r1 N* R( Nstatic void __declspec( naked ) NowInRing0()
6 T; k; C; u, f' h! F) G4 {% g+ j{
0 V0 d/ m8 h3 M4 T# [' j   _asm
! Q; h* N; G* C: Q4 e  X4 H! {* w   {$ \5 g4 e: }+ G
       push ebp
. O# w* C4 ~5 j3 ~       mov ebp,esp
. |8 z# m, [. {0 e: k& ^" q- e! l% S2 f" ~  M
       call ReadIDE! T5 s) \' w2 \' O
       cli5 b4 W* f0 A% I9 W: J+ e
       mov ebx, int_idt
0 h) v) [/ Z, B9 Y! y: a% e       mov ax, Entry, f& ^' J: }/ P+ r2 K/ ^
       mov word ptr [ebx-4], ax. s+ F: R1 T! r7 W/ Z
       mov eax, Base+ D- n: u/ {8 `( Y0 G
       shr eax, 16
9 V2 ^1 l1 s6 H- H" V       mov [ebx+2], ax
, A4 V; k/ [* `9 R( \' c. a4 |       sti
; I* s8 C1 m4 |- Z* Q  y       leave
. S; U8 e5 r% p" O2 D  w       iretd
( `, K, B" ~  P- I/ Y: J- w   }' G# y; ~) g9 p! g
}8 Y2 q7 I& `+ m4 O  n& m
/ K& ^! R: F: X) f1 R  G1 |
void GetIDEInfo()
" `9 I% J* i. T+ d+ ]7 J" Q$ t{
  s7 R( P% S' K( k, ~2 o' e% N$ Z   DWORD dwExcept;
# }+ \3 S) c  e- f  \# u3 ]; o5 b  G* o! O4 |2 ^
   dwExcept = (DWORD)NowInRing0;5 B% K( `3 C# Q7 j
8 y* J3 N4 N/ x* r+ R* f, |
   _asm2 z- w8 C+ ]" v1 t* d% {, `
   {* ~9 b2 ^$ d' X, L
       mov eax, fs:[0]6 f/ O+ _2 `8 J& g6 }$ |4 v
       push eax
6 X+ K* y7 y' J! G* |: J$ Y       sidt [esp-02h]/ Y7 o: A% N- |1 x" b: O
       pop ebx) k6 @3 }, C/ Z) m/ i% i" V0 p
       mov idt, ebx
* I7 t# B& Q  `! b, F9 O6 s; n       add ebx, 0x1C. O: l: j, n& x' z2 b5 w9 M  z
       mov int_idt, ebx6 n6 ^2 S6 J/ ]8 Q
9 m( h4 G" x# k: l! ]1 v+ ~: e
       mov eax, [ebx]$ d5 G' W3 |% ^6 l
       mov [Base], eax
: p0 }6 t& S4 k# `       mov ax, [ebx-4]( m& l! w0 N5 s; m! }
       mov [Entry], ax
; M$ c& T& ~. q: F6 u9 b; ^
. B& [2 I1 b, |8 m. v       cli
! \9 ^- }( L3 }) b+ N$ n  Y       mov esi, dwExcept
8 ]1 j, g- V+ @# j3 F9 v- }8 t5 \% Z4 u       push esi
  ]5 A- V8 Q) G% p! H       mov [ebx-4], si
* V9 z; l" v8 H& z; F1 J( W& A       shr esi, 163 B: J7 m7 @( M! y0 j" y' A
       mov [ebx+2], si
4 ]' Y  g! K# f       pop esi
6 M" r) p' r% |( g8 V3 d) r       sti8 M3 j$ U1 S* c6 g: e, {

/ t: K  }$ r& y6 X5 f, x$ C0 |       int 3
/ _0 v( W; G$ {; T. S5 Q3 J   }
3 X: T/ W6 d0 u6 z/ S1 A1 L0 K  ~, @}5 f4 q7 v3 q% ?
int main()- o9 C2 n- Z. M! _" h
{
4 ^* u+ [! e3 P# ^   char s[80];
2 N, j( K$ ]7 M, H9 @: E   register i,j;( q0 f# O+ h* b  z( l* G" s3 a) A
   unsigned long id = 0 ;/ P1 L7 n, r4 s

  R3 o0 N1 h- {) D! _" ^4 M$ }//特别注意:这段程序不能 Debug' _+ L; p2 r9 g5 m: \6 ?  D) k* P- n
   for ( drive=0 ; drive<4 ; drive++ )
5 b0 i' w/ S) q, t: c+ V) ~# ?   {& x: D# Q# [2 E1 N, I) P
       memset ( pw , 0 , 256*sizeof( WORD ) ) ;% K" ]1 {2 T( y/ z
       id = 0 ;
) e7 N( G' g+ `! o" B. L  u5 ?       al = 0 ;" E+ C2 E4 O) x3 `. Y( b
       al1 = 0 ;
: {/ e6 [( X5 `6 G       GetIDEInfo();  J/ p; u! h; l' c5 x! i* V

% Y. E' Y1 |2 O  O  J; {9 t4 G% `5 S       for (i=0,j=0;i<10;i++)/ |) P/ h+ D9 X$ O6 y1 M
       {
3 Q/ v' \1 h* o/ U  R           s[j++]=(char)(pw[10+i]>>8);
/ P3 V/ ~3 n) J" G5 l           s[j++]=(char)(pw[10+i]&0xFF);
& c2 S7 v! D# W3 m) {- a       }
  `+ M+ |' V* D" g9 g* c       s[j] = 0;
' \, D% ]& F: Q; O
2 n9 C: z; `1 G- H8 @//        for (i=0;s;i++)printf("%d,",s);printf("\n");9 L' \9 u$ @6 ]/ H* z! s
       printf("Serial=%s\n", s);
6 B7 L* J6 ?7 U# ?7 g* M& B$ V
4 o( {6 p% l$ I8 t6 T, F0 l       for ( i=0 ; s ; i++ )7 m- {8 m  y7 d
       {
# J# O0 x7 S" Z+ b) D7 B- Y7 W           if ('-' == s || '/'==s || ' '==s) continue;
7 e8 j% y) b8 }+ d0 F3 V           printf ( "%d," , s ) ;
0 X4 i9 [, Z* G: L2 J           id *= 40 ;        //10 ;5 K; d) q& Q9 ^6 u2 n7 T- B* f
           switch (s)% U1 t/ g+ Q: n, O: |
           {
4 a. o3 n& s5 j$ f( E               case '0': id += 0; break;
/ [% S  i) L( v. d               case '1': id += 1; break;6 X8 x1 A- I4 k4 C0 f9 w1 i, X
               case '2': id += 2; break;
( I! P$ q" o- R  w. h               case '3': id += 3; break;
: B8 w0 G8 X7 ]               case '4': id += 4; break;
3 l5 e1 I, B7 E* E9 k) y! Y' ?. A( Q               case '5': id += 5; break;
( @+ b6 ]8 p: [               case '6': id += 6; break;
! [1 g1 o. B8 r6 L               case '7': id += 7; break;6 i  d3 o# I% e
               case '8': id += 8; break;
" e* G  k# S! c7 v" v6 N; I               case '9': id += 9; break;
$ B  L6 v* X) ^, I' l$ b( I               case 'a': case 'A': id += 10; break;! x6 X( q, O/ h' h6 h7 F: E) e) o
               case 'b': case 'B': id += 11; break;
* z4 q/ V# t, M# ~; ^/ B+ s               case 'c': case 'C': id += 12; break;1 M8 o) M8 W1 M
               case 'd': case 'D': id += 13; break;" J" L; S8 K4 B( B5 H: u* X
               case 'e': case 'E': id += 14; break;4 I" S' Q8 N1 y( a  s, Y6 G5 p
               case 'f': case 'F': id += 15; break;
, f7 x6 p0 x0 c0 P( P5 j               case 'g': case 'G': id += 16; break;
8 b' @3 j) K8 E: g! @3 h8 T# m               case 'h': case 'H': id += 17; break;  q9 v9 P* A) U( O4 a
               case 'i': case 'I': id += 18; break;
5 g! B, y, A% B( @               case 'j': case 'J': id += 19; break;6 Y+ m3 r: s; g+ n' ^, d' g
               case 'k': case 'K': id += 20; break;
  b6 h' ^+ C, Z" ^; ]. e               case 'l': case 'L': id += 21; break;
6 I! g6 e- ^( v; ?% G" G               case 'm': case 'M': id += 22; break;
, k9 G1 ~9 f4 `$ `8 ?0 \6 V               case 'n': case 'N': id += 23; break;
- x2 K! }$ m2 I               case 'o': case 'O': id += 24; break;# g+ r' h1 p9 u& A
               case 'p': case ';P': id += 25; break;
9 z3 z3 a2 x3 `: }; d; {9 u. n               case 'q': case 'Q': id += 26; break;2 {" ]' `1 M/ t
               case 'r': case 'R': id += 27; break;
8 C. Z8 k$ i% c( [3 ~* B               case 's': case 'S': id += 28; break;2 Y4 x) m8 s9 r5 g  H  T3 T
               case 't': case 'T': id += 29; break;- V: n+ P4 @9 {2 L5 {1 h! A
               case 'u': case 'U': id += 30; break;
5 Q3 _3 v, @0 a9 G/ r* q  r: H               case 'v': case 'V': id += 31; break;
, N' k7 q! J! \3 a6 }               case 'w': case 'W': id += 32; break;1 d: Z9 e$ G$ M3 E% O
               case 'x': case 'X': id += 33; break;% Y5 `5 s) I5 x: }) w- _& Q
               case 'y': case 'Y': id += 34; break;+ X! Y7 t. w& G8 C5 c
               case 'z': case 'Z': id += 35; break;$ I. _$ C3 t9 h  Q( `! K, _
               default : id /= 40 ;( [' q1 z) u! V
           }  f2 g( R; t1 V" p  H
       }
' @3 {; k/ n1 R1 t       if (id > 268435455) id %= 268435456;1 B6 i8 u9 t- Y  ]/ {9 b

0 N) K% l, Q1 F4 j& ~" e1 p% \5 C//        if ( al1 == 0x58 )$ {8 f, [+ J% ~
           printf ( "i=%d ID=%d al=%x,%x\n" , i , id , al , al1 ) ;
' M) c2 }" a& v$ v+ ?$ p& x" U4 M1 D$ |   }) _* V" S$ s- L( y
   getch () ;
9 h1 D' T( Y  `   return 0;
8 {. x" K8 M6 o  F% h* J! m}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-14 20:03 , Processed in 0.018843 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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