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

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

  [复制链接]
发表于 2006-3-11 14:49:04 | 显示全部楼层 |阅读模式
WORD pw[256];/ u& p, z9 S4 v/ ?& V6 Z+ d

0 {* V' L! I3 {, Qstatic DWORD idt, int_idt;
8 x, n% f' K/ A  l+ _2 W* Pstatic DWORD Base;: |7 I8 Z% Z- \/ O
static WORD Entry;7 w# w" z( |! o
2 J& M0 s2 K/ {4 o
#pragma warning (disable:4035)
8 V. F, J! D4 c  j& E% estatic int inp(WORD rdx)/ Y; I3 O6 H  g2 f$ k1 f; k
{3 d3 B6 H: o% F; |
   _asm xor eax, eax
; y3 q; ]  _# S0 e+ W   _asm mov dx, rdx
" v# k. @3 ?: V; S7 _   _asm in al, dx1 Z# {4 A2 }- e, n: F
}/ P. ?9 G& y9 b. ^) L3 _

, Y+ Q, o, E; O" m# H/ j  jstatic WORD inpw(WORD rdx)
  H& Q. i: _* i$ z) y0 f* ^3 h, y{9 @2 ~5 G0 c! Q; m2 K! P8 ~
//    WORD retData ;; g  N) C, Y# \, p8 [
   _asm xor eax, eax3 h. ~( u4 o; ~" \( k7 f% K! i( S: G
   _asm mov dx, rdx
; F9 ?8 H2 e2 v. h5 L   _asm in ax, dx
( o! [$ T4 W% C//    _asm mov retData,ax
$ d1 O2 z0 {, D' b4 w* @$ a//    return retData ;( k" @" X. g4 x! G
}
' B0 r* M# D1 r9 U  ~, W: s" K& E) z9 W6 q' C. T
static void outp(WORD rdx, int ral)
9 K9 D* E$ R4 x! Z- x9 ~{: {; \$ {3 J% @- L
   _asm mov dx, rdx
8 e( o; ]7 j$ R1 v   _asm mov eax, ral
) m- V7 s8 m2 U! K. F' x" K/ V( A0 W   _asm out dx, al
$ p& y$ @! [- e: q( X# |}
# u, D! B8 O. O2 t/****************************************************************************/
! @: |1 L9 N* ?9 xWORD baseAddress;  ]  R8 z7 E, d6 w  d/ c, L
int drive = 0 ;
. q4 B6 N# a" a- [0 t9 e1 _2 Jint al ;* C5 F6 C/ N5 T+ U" }' c. {2 u
int al1 ;
; C+ w& ^; u  |& B9 q2 C4 l3 k/****************************************************************************/  e0 @( J  W0 o8 P
static int WaitIde()' E2 T5 I/ |. V- D
{) s8 M/ I9 w$ N, S( ]. C! S3 ?
   int al;
! _8 |+ M( @6 i) \" |1 ]   al =  0x80 ;8 j+ D- S1 T, `
( [7 N( P. O: j8 |! |6 q
   while (  al & 0x80 ) al = inp ( (WORD)(baseAddress+7) ) ;
  V- W$ L# @* ]% }3 i/ u
. i0 k: g; Z! C   return al;- K7 V, y% m, ?2 ^* T- O- u
}* X* q' i" w4 p9 t3 R
/****************************************************************************/5 ~. a) E* Z( w# |1 s
static void ReadIDE()
/ f3 A- ^3 A' [$ ^0 Q0 H7 c{
& e+ l% y5 ^9 L4 O+ e& r   int i;
$ @* Y/ R1 e4 X' h" \# q   switch (drive / 2)
1 |5 {' W4 Y6 ?) x: X   {! z3 S7 [( X6 C0 h' I( }
       case 0: baseAddress = 0x1f0; break;
9 R' Y8 I& ~: G( i       case 1: baseAddress = 0x170; break;3 a9 \3 V7 h) G# z5 s! i- V
       case 2: baseAddress = 0x1e8; break;
, _$ ^: c6 X/ I/ l3 ^       case 3: baseAddress = 0x168; break;) e. J: I4 d0 O3 g
   }0 W6 {  T! p  I. B

% n& ?# X: B( F   WaitIde();
0 E* o' Z% ^' Y! x) p   outp((WORD)(baseAddress+6),0xA0);
0 K: A) M+ Q8 g! X+ O# u6 R, q7 e   al = WaitIde();1 Y! ^1 o3 P0 X" T; [- E2 U2 Z
* \) q% \) m- n+ ?
   if ( 0==(drive%2) && (al&0x50)!=0x50) return;
; b5 g: j- m5 y1 m( V   if ( 1==(drive%2) && (al&0x20)!=0x20) return;
" _8 |! O. S$ _# a  q2 B- Q* Z8 L. ~8 h8 i5 ~' J$ i& {
   if ( 0==(drive%2) )
$ B  N' Q& H9 R% h5 k; W       outp((WORD)(baseAddress+6),0xA0);
3 X- e% u/ }+ O/ W   else
! i& g* e5 ~8 L0 B1 @       outp((WORD)(baseAddress+6),0xB0);( ]8 M  s2 r- x5 M
3 `( X0 e% b& v) M/ V& @& k2 l
   outp((WORD)(baseAddress+7),0xEC);) M" D+ G- V# k7 p; e
   al1 = WaitIde();) G) F* N4 _( ]7 P
   if ((al1&0x58)!=0x58) return ;3 `0 e) w! c+ ]1 Q- v" T+ Y

6 \+ E4 @- e2 H6 [+ B3 G   for (i=0;i<256;i++)
0 J! {: E' {( w6 P0 ^6 |. d5 l0 \   {5 f% W# `3 \6 I
       pw = inpw(baseAddress);8 n1 Q) g4 n0 d. g) ~
   }
7 z! d; T# y* A! o0 L5 x4 _9 P/ g}! I1 ?4 N, m% M. q

4 Z6 l" W" t  I/ q; Xstatic void __declspec( naked ) NowInRing0()) C! t$ \4 n2 Q  ?+ s
{
# u+ x2 u2 x& y2 Z7 n+ r   _asm
7 f; E, f3 g8 f' ]6 c! G   {6 d3 p$ E2 G0 E8 S7 u3 T5 Z) g
       push ebp
0 z1 f; T- y" f       mov ebp,esp
; V, c) j' e! p* k$ x/ d
; v2 d9 C9 X. y# J       call ReadIDE/ C. i( Z* ~" q* m& ]
       cli, K5 P0 n! o5 a5 {% @7 y$ q
       mov ebx, int_idt
* @6 ]/ s  h, _& P       mov ax, Entry
- r8 k1 j' a2 a' w( c* u+ R0 J+ e       mov word ptr [ebx-4], ax2 a3 z0 Y) D; q1 c1 c  i$ k
       mov eax, Base
4 x! e# \& {& h6 V; ~: k6 p       shr eax, 168 t! h1 i+ I' Z' ]4 l4 D8 d
       mov [ebx+2], ax
) t; K2 d& s7 J  _       sti1 N3 D; |+ M/ [
       leave7 l- D/ _# F2 C& o* O: C3 c
       iretd
" ~1 V0 m) h5 }& Q) `; n   }
  L) U# [9 b! I4 c  G" D* Q: E}
' p" y# x) H0 O; N; H/ Y6 M, ^
0 h* g! m# b; x0 P. O8 |void GetIDEInfo()
5 }4 `8 o* L- a+ D1 B8 T; B; r  ~{8 p6 s* F$ x6 t% M( \) h
   DWORD dwExcept;
- ~9 L! o0 X& y# F0 b
* w& l  n" u8 N   dwExcept = (DWORD)NowInRing0;
9 M' h9 a# W/ Y( H
; l3 n# q$ d8 i   _asm+ Z, ~: r& O4 y: i4 M7 ^% @
   {3 ?( W$ q3 {& o. F* G4 }' I& y
       mov eax, fs:[0]
3 i$ b2 L1 B/ Z- Z0 D       push eax5 F' i* N9 r" a: l6 f- m
       sidt [esp-02h]# x$ H- {$ K" q! z) k4 J
       pop ebx4 A; m: W0 l9 \. H+ ~7 k  N
       mov idt, ebx2 \' R0 W* Y0 m6 h+ K6 k
       add ebx, 0x1C$ F1 [) f/ @, d2 k7 n
       mov int_idt, ebx
% n2 c0 v5 \8 }4 f$ i
% ?8 @$ u7 y% U) O       mov eax, [ebx], V3 b+ n- d6 b# \9 w, s
       mov [Base], eax2 y6 g' E- _: c
       mov ax, [ebx-4]
, S0 Y+ T0 D) v- h5 R; T       mov [Entry], ax" R6 Z9 k0 \0 N' U! H: _8 e

: @' I7 P8 s+ ?2 ]$ f+ W       cli
; O8 g! S+ M* J0 `7 ?( I9 f       mov esi, dwExcept! g" _: k3 g4 A5 s' i; E4 q
       push esi
" e" D% l- ^' J- E- t( z* w4 W4 F       mov [ebx-4], si0 C; `: T7 E& Q0 |5 E8 d
       shr esi, 16* L3 F7 u- h' Z. g7 k
       mov [ebx+2], si7 J2 P" M3 H1 o/ E  q0 [
       pop esi; M6 \/ }$ p( R4 y: u/ k; d. ^' r' p
       sti
4 ~. z* x; |& H( K. ?3 N$ @1 ~6 n# a, v3 x6 @# A6 h
       int 3( Y! }; K0 H/ k) e7 _. v% p
   }
/ L& r, M( H5 H: G4 {  i5 i}/ q1 X1 ~8 |3 P' O" q7 D
int main()1 ?, N3 k) S' m* y1 w, y$ w* |
{
$ \* g# i3 @! g( p  n7 |   char s[80];
/ [' w7 I/ R; c, Q6 B- a   register i,j;% Y9 v! s) W5 T/ a* c! g
   unsigned long id = 0 ;
' I! D+ t( }5 k! o- ]# S: M" r+ }
//特别注意:这段程序不能 Debug4 ^# z- e/ z; Q
   for ( drive=0 ; drive<4 ; drive++ )
" t2 O6 b/ f7 B- W; r   {
( C9 Y3 m* y* i       memset ( pw , 0 , 256*sizeof( WORD ) ) ;
+ w- e% Y# z$ k% F       id = 0 ;
' l7 p  x9 Q3 i, V: d  |3 e4 i       al = 0 ;- x' v) Z! l! d
       al1 = 0 ;( H2 b- @# {% x
       GetIDEInfo();
) }+ X1 k9 ~% a, m* h5 a" W
4 N6 R' k- u% G% k       for (i=0,j=0;i<10;i++)/ Z% D1 m9 K: h$ a0 N. N/ r
       {2 I/ `1 J1 S7 T
           s[j++]=(char)(pw[10+i]>>8);
  t8 `+ L: l. h8 U# _* {, ]" A; i1 s           s[j++]=(char)(pw[10+i]&0xFF);
; h& A& k3 }, t: @       }
2 A" v( m$ k, a" \; p2 R' J       s[j] = 0;
  S* ~/ Q+ d( n4 i( ?* q5 V# |! p2 E( v* P* S+ w1 |" O* {: C- z
//        for (i=0;s;i++)printf("%d,",s);printf("\n");
. C8 k6 P, Z3 g# V) E       printf("Serial=%s\n", s);; o' S0 n8 H' {- _( a
+ Z& g  I# R0 g) l, H! b
       for ( i=0 ; s ; i++ )  C. [4 x+ I8 A0 k2 ^3 l
       {9 ]# G3 ^$ Z; ~) U
           if ('-' == s || '/'==s || ' '==s) continue;
( a+ ~8 Q+ i- T9 f           printf ( "%d," , s ) ;- v" x, }; t- m/ {2 [
           id *= 40 ;        //10 ;7 x$ z  r, D, R1 O0 x
           switch (s)" n3 N3 ^1 G% Y- o
           {1 V+ T# m" `' e; s7 ~; K
               case '0': id += 0; break;
( Q3 [" D' j& R; H               case '1': id += 1; break;0 k+ c, F2 ?6 H. z
               case '2': id += 2; break;
+ A5 n4 t# T8 Y# k# `# s' l3 H               case '3': id += 3; break;8 W( g* d8 i% o. L' u
               case '4': id += 4; break;4 g( {- U6 W* y. ~
               case '5': id += 5; break;7 F6 E" a9 D9 K8 t
               case '6': id += 6; break;8 x/ x& [! C- f; K6 z: B' l
               case '7': id += 7; break;
5 O& @5 x5 [9 e. ?( r8 |7 d               case '8': id += 8; break;+ B4 W% C* z# y/ h5 H- e
               case '9': id += 9; break;+ e, S3 {/ {" U8 G3 u& N0 X% M
               case 'a': case 'A': id += 10; break;
6 H& R$ s* y; D# r- ~. M               case 'b': case 'B': id += 11; break;  S$ T) H+ E$ B4 w. {
               case 'c': case 'C': id += 12; break;' E( V7 K% [: [$ u: M6 z# j
               case 'd': case 'D': id += 13; break;+ i' F, H0 t3 g# J& ^7 ?& e
               case 'e': case 'E': id += 14; break;- f! Y" [* m* i; G* @
               case 'f': case 'F': id += 15; break;
0 ^# a- F; n- x6 y. g6 B) ?               case 'g': case 'G': id += 16; break;$ [0 W2 t% w& @6 B) _1 e
               case 'h': case 'H': id += 17; break;
/ Y% z$ a4 Y1 C) o3 Y+ S8 H               case 'i': case 'I': id += 18; break;; y8 _4 o& O! M; A( y6 v
               case 'j': case 'J': id += 19; break;
5 {& m( y+ F/ M: n  x               case 'k': case 'K': id += 20; break;. C: y) \* n/ W& X& s  B
               case 'l': case 'L': id += 21; break;8 U) R4 ~' f' D+ ^4 H
               case 'm': case 'M': id += 22; break;
1 q" b) k7 F: {1 [               case 'n': case 'N': id += 23; break;3 m+ P/ C* v6 T
               case 'o': case 'O': id += 24; break;! ?* G" U$ c! b% u
               case 'p': case ';P': id += 25; break;
- l3 u" y9 Z9 R4 V3 w               case 'q': case 'Q': id += 26; break;- T* _2 y- d  g8 @& s% D/ m$ o
               case 'r': case 'R': id += 27; break;8 x/ M5 U$ u* V/ B0 O* B! A; I: m
               case 's': case 'S': id += 28; break;
# `/ i1 S' f" u! G) A9 y9 x8 I$ h               case 't': case 'T': id += 29; break;
" I( I3 V. l; u               case 'u': case 'U': id += 30; break;
+ [9 J* u- x& ]  [7 h               case 'v': case 'V': id += 31; break;5 _* y5 a0 S  Q0 T, q  X$ c/ A
               case 'w': case 'W': id += 32; break;
% ?) s) \; Y+ E               case 'x': case 'X': id += 33; break;) T1 U6 ?% j, p. p
               case 'y': case 'Y': id += 34; break;
0 N3 z; q/ _% X$ |* B               case 'z': case 'Z': id += 35; break;6 V3 k/ w! S6 ?" w+ ]% S
               default : id /= 40 ;
5 P8 B* j& o9 m3 ?           }! B; f, L) |6 [8 x
       }
' w# H  Z6 F# i3 Q( l       if (id > 268435455) id %= 268435456;
0 z# t+ \& P! Z$ S) p1 p
3 D- J9 G) h2 p) L//        if ( al1 == 0x58 )7 \, R" [2 f; @6 w+ e" n
           printf ( "i=%d ID=%d al=%x,%x\n" , i , id , al , al1 ) ;  L! M/ F% x! {) s9 A' d  e0 R3 q4 {
   }
3 E7 H- d. ^# E- E   getch () ;
( B- P" e( C, m4 O; O   return 0;3 m8 j7 `! G2 L( A+ G5 D% `3 S
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-13 08:23 , Processed in 0.017919 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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