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

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

  [复制链接]
发表于 2006-3-11 14:49:04 | 显示全部楼层 |阅读模式
WORD pw[256];4 b! N, j8 U1 K1 R* N/ E6 Q
8 u1 o- T% ]: R0 J- A4 B
static DWORD idt, int_idt;
& H- P. L+ _/ D, u1 U4 E/ w/ K5 w; }static DWORD Base;
$ [# A4 ~8 m2 s+ b4 }static WORD Entry;
, `4 P+ ~+ }' ?- U% X; Z, n" D- Y& i1 D$ ^( h2 |
#pragma warning (disable:4035) ( W% \" }8 f& u6 w, ^
static int inp(WORD rdx)
+ g: @* V- u5 t{0 N, l+ Y9 S- I+ w  U% x
   _asm xor eax, eax
5 S4 ]  i# V3 [" I. Y, J3 b   _asm mov dx, rdx
) H) a! p0 }# R' p# v. ]8 r   _asm in al, dx
  {; d1 s! }1 |3 b) t}$ B  {, a, g$ ?( ?5 x2 g# l
( h* X2 `# t8 f# z. n& E
static WORD inpw(WORD rdx)
4 A3 X3 w7 X- C& w) Z0 P* x* U- v: E{
2 v' O* i1 G3 Q- o//    WORD retData ;* O/ o7 e6 g' g
   _asm xor eax, eax
3 Q! A5 C9 T$ x  j. x   _asm mov dx, rdx% t! w1 F5 g( P' Z
   _asm in ax, dx7 |/ u$ N4 j; I- o) n
//    _asm mov retData,ax
. h, n; O+ I+ i8 Y) C//    return retData ;
, L' K2 d: S/ @6 K( N}
& }1 D( ]) V! M' F0 A# P0 q* a# B1 N/ f
static void outp(WORD rdx, int ral)+ m1 j( E* `& m9 i+ \! B: H/ }5 w
{1 n; Z. E4 S' W$ ]
   _asm mov dx, rdx
+ z0 `. p3 @& P* w8 O# N- w   _asm mov eax, ral( p) T' Z, _+ X  [
   _asm out dx, al
0 i6 j, T6 f; l}* f1 {/ r! J# i- {5 ^
/****************************************************************************/
4 E, V8 W6 P1 F0 C7 F6 U) xWORD baseAddress;
% o7 G' [0 C9 @5 v7 N  sint drive = 0 ;& ~- o1 t( R+ F$ z/ Y
int al ;
! r! K" \0 L: |7 ?6 c& e) d! y3 yint al1 ;; m# Q, G6 W# Z# i
/****************************************************************************/
3 A$ o6 n8 m# istatic int WaitIde()
' F* j& Z$ C) j! r, [& n- j% _' V{
% _/ r& ?4 S+ G" R: U   int al;
+ R9 N) z' Y% ]6 n% b) w   al =  0x80 ;
$ J! I/ C5 p. ]0 j0 C: y8 b$ {+ d3 B" _& K0 ]" ]
   while (  al & 0x80 ) al = inp ( (WORD)(baseAddress+7) ) ;1 |) _" H3 n5 @
' Z% u. a/ J0 a. L4 Q6 T; A; p
   return al;2 _) M8 z* e# u9 E3 ^
}0 S* |3 G8 X8 v' C  [! X2 b( {* t: w
/****************************************************************************/
; V0 `$ ]2 ~" V# h. m( R- y7 ]8 ], c% a  gstatic void ReadIDE()
; p* U* k! ?2 W6 V, m7 z{3 F4 X. g. d: ~! x3 y1 X
   int i;  J9 |1 W" f! x1 `% Y' I1 Q# y; v+ c7 k
   switch (drive / 2)5 [: d5 o8 h( k0 N' w
   {
3 P/ ?+ U$ L, v# C1 a7 u, s       case 0: baseAddress = 0x1f0; break;0 ^) D# t" }' h
       case 1: baseAddress = 0x170; break;9 t. e- ~+ b% Z0 m2 D9 |& U: m
       case 2: baseAddress = 0x1e8; break;
" j, I$ U& w% e4 S" V       case 3: baseAddress = 0x168; break;3 I* `& k+ X  C9 @  J6 n% B6 L. l
   }+ h6 B, e, I: Z# @, [5 H
/ I" Z- Z& }0 Q. Q/ w
   WaitIde();
7 J: T6 y2 p$ @: t) A5 {" l  r   outp((WORD)(baseAddress+6),0xA0);
" Q( c5 }: U% m   al = WaitIde();6 U7 M$ M  o. z6 Z3 w
: O8 r% B8 f4 U" X7 e2 L  q
   if ( 0==(drive%2) && (al&0x50)!=0x50) return;
) _/ u. b0 @" |: m2 |   if ( 1==(drive%2) && (al&0x20)!=0x20) return;2 x. |! u3 P8 z2 Z

3 Q6 c1 e9 I/ U   if ( 0==(drive%2) )
. B6 J( K0 y* t/ }7 |       outp((WORD)(baseAddress+6),0xA0);) z8 f7 x& K) g$ Y# U" w
   else
  b7 H9 Y" J1 H* ]) |. |       outp((WORD)(baseAddress+6),0xB0);
. _& d( a3 Y, `+ ^; V* k; X' F- `- W8 @/ U  x: \) P
   outp((WORD)(baseAddress+7),0xEC);
8 c( A1 {' K. B( p; K# T9 I* Q5 [. c   al1 = WaitIde();
0 a' Z, I3 U+ k   if ((al1&0x58)!=0x58) return ;
/ Q- A# C+ U" U3 i* y0 y* L
7 Y# w% x" ?5 ^- n# g   for (i=0;i<256;i++)8 f4 U( B! ?1 C) w
   {
% v7 ~4 o: r  Q       pw = inpw(baseAddress);& v1 Z3 l% A- U8 u4 Y1 Q
   }7 z8 E8 e5 Z' G8 ?2 l3 _; g1 q% R
}* Y# c5 O7 R5 F! Z0 n) H
7 m! m, z( v* U8 C2 A* H  c
static void __declspec( naked ) NowInRing0()0 @4 e& {. D0 ?, ]6 R
{$ p$ d2 V3 P5 C7 {* ~' S
   _asm, o$ Q3 ^5 T/ T' R5 E4 L
   {
/ J: m% j% F) N, X3 N       push ebp5 m; F7 _1 w" I
       mov ebp,esp
. A1 b3 G# w2 e1 `/ @$ P% v
% y9 u& E* W1 a( s( j  I' A       call ReadIDE0 t& w, ^& P& g& L9 B
       cli
* j" w- N6 R( N4 F; `       mov ebx, int_idt1 {. m  V; B  }/ Q
       mov ax, Entry3 |# f+ M/ E$ b4 r
       mov word ptr [ebx-4], ax
  s3 w9 Q" b' j$ Q$ N       mov eax, Base
( w  e( O9 b( p/ w% p) O; Y* S- y       shr eax, 16, G8 }/ u# b! O! `2 Z& q1 w
       mov [ebx+2], ax+ p8 J7 T7 S  I" Y" b
       sti' E! l2 m. s/ A2 t* i
       leave
: l# E6 h2 P2 F       iretd
; p9 ?& F" W- a   }
8 }' e* j2 k, E/ `- r' X& I}
7 _8 f( x  w2 V' [
& i& L2 w& W+ B, n; g7 k; bvoid GetIDEInfo()4 p' ]5 G  b! k
{: r! r; X( o. d/ v
   DWORD dwExcept;1 f% U9 O( Z) }# A4 Y9 h; T0 w7 C
7 b- @! B* C  C, v7 J
   dwExcept = (DWORD)NowInRing0;
  H3 n: T; P1 x0 t4 {7 h
4 ?6 z8 h9 p. \   _asm1 M' I" b& O8 D% p/ o6 e& _8 S
   {4 H4 W+ g, H8 F# x  h( P. ~6 m, ]
       mov eax, fs:[0]
' D: R7 J8 [$ g' C4 T       push eax
# i+ `. A, |# c  j, A$ G       sidt [esp-02h]
% H6 v( \6 M; R+ g7 c: N" R       pop ebx
; X  L4 N3 V9 T7 ?+ Q       mov idt, ebx
/ e  ^' a! N! z       add ebx, 0x1C
; \. [* I. w9 D6 E) m& i       mov int_idt, ebx8 O8 V7 v* E0 q/ v7 f4 C' u

8 X% }3 _4 T/ R, U5 ]       mov eax, [ebx]1 {) j* q% \3 i- Q$ w3 A
       mov [Base], eax
/ T4 L4 k' k" q6 R8 w. c       mov ax, [ebx-4]9 c4 i; `! F$ g' D4 g  ^! q. ~+ }
       mov [Entry], ax& N, C0 k; y7 K
) c" H( v8 i; [$ ^+ J9 T! z/ O+ @; h! ?
       cli2 _3 M% E' ~: |
       mov esi, dwExcept, M# b$ |& ]" i7 F5 L( [
       push esi) d! r- k5 V1 _
       mov [ebx-4], si. q+ s* p! n' D9 B, ]) k
       shr esi, 16
, {0 N& N7 W/ I2 a1 n       mov [ebx+2], si1 }; y% Q* l: B- d8 p. X
       pop esi) [7 H9 M6 N. f
       sti& F% t  c5 F$ }* u5 P5 s. y3 v

5 I  x2 m7 U" y! I       int 3
. a0 e3 A# o7 [# }1 C% y9 w% E( E: o   }
, t0 B% R1 c$ Z* E* A( h; Q}9 }( `$ Y# V3 r
int main()
3 x8 ]5 h- _5 U5 N7 U/ l{
# \1 |4 ?& E/ M" S   char s[80];7 o4 e, f1 s4 f( b; u
   register i,j;
) [  w. E  `* ^- r   unsigned long id = 0 ;. {* D  x+ V) d% z  w9 k' C1 [
" @& E' J; d$ G/ E4 @3 w
//特别注意:这段程序不能 Debug
% k& Q, [1 N% z2 |. P+ ]   for ( drive=0 ; drive<4 ; drive++ )
. ?+ T- u, g3 G# ^   {: ]/ p; }: Z, l+ z
       memset ( pw , 0 , 256*sizeof( WORD ) ) ;8 X# B6 [" `9 C/ N+ i5 ], X4 y) q# o3 h
       id = 0 ;
6 ]5 J  ?/ O/ f3 u$ V; S4 [       al = 0 ;
/ g* Q2 P" `% \; F       al1 = 0 ;
, m; A5 q# d' |% o. f7 W" ]       GetIDEInfo();
% i; ]2 \  W* A1 S8 _, [& a" s- |- |5 T7 n
       for (i=0,j=0;i<10;i++)& z* C( |" G/ b8 X# e0 _) A
       {* k( ^) J; k9 T0 {2 {* j& G. S
           s[j++]=(char)(pw[10+i]>>8);
" ^# @7 x. _" P9 `1 Y           s[j++]=(char)(pw[10+i]&0xFF);( d% R! L% z0 [
       }& j9 n& O# W. S7 x# ?
       s[j] = 0;
$ w0 r- b5 |( s1 B5 E' T* d6 C* `$ X8 f. x+ V; q' b
//        for (i=0;s;i++)printf("%d,",s);printf("\n");6 X7 J& n9 i0 k% H
       printf("Serial=%s\n", s);
4 k' I$ ^" |  J, J5 e* a
* \% N* z* j0 Z: ?4 Z       for ( i=0 ; s ; i++ ); {- C* e9 i9 `/ |+ T4 B
       {
+ f" o$ K7 _. }3 |' p( t           if ('-' == s || '/'==s || ' '==s) continue;6 T: h* q8 E: G: Y+ b) s2 s
           printf ( "%d," , s ) ;0 k$ b' h( o+ r; I/ t# k9 i
           id *= 40 ;        //10 ;
. R4 Q' X1 d: |6 V           switch (s)* i4 B% I! o, z; u9 T
           {
' _5 r+ V8 U. l6 ~) O7 ?/ `/ D& s- H               case '0': id += 0; break;
4 {- R# K: t1 x+ }: u4 E, \0 }               case '1': id += 1; break;# c/ p7 E' X0 R& u  d2 k
               case '2': id += 2; break;; U- R2 d' [, J
               case '3': id += 3; break;9 F6 s. u) W& @) ]
               case '4': id += 4; break;7 J' T4 k9 F/ D+ X6 e
               case '5': id += 5; break;
! M% \7 R3 E9 x9 M4 s* u* o, r               case '6': id += 6; break;4 p4 [8 p5 H; `, [/ O
               case '7': id += 7; break;
9 P" _% J' c+ u6 U/ I( W2 M6 d! \               case '8': id += 8; break;
2 m3 N/ c! c! ~0 R1 S. M               case '9': id += 9; break;
; u- Z3 i1 v5 k4 @" I4 r               case 'a': case 'A': id += 10; break;; {+ n8 q7 u/ U8 ]1 Q/ m% x$ N
               case 'b': case 'B': id += 11; break;8 b0 {# c& C( V1 I
               case 'c': case 'C': id += 12; break;
" O( N6 t' |+ |& k9 C6 a! J               case 'd': case 'D': id += 13; break;9 x* \! \/ P- H) A
               case 'e': case 'E': id += 14; break;
& o+ `% N/ R5 I) w2 ?  r               case 'f': case 'F': id += 15; break;2 M: Q( c4 B. r) V8 w9 ]
               case 'g': case 'G': id += 16; break;
) V  g( }% n, m2 s8 ~               case 'h': case 'H': id += 17; break;9 a0 u0 o8 M! e5 [
               case 'i': case 'I': id += 18; break;
" f' X0 O+ e- T! [3 ]               case 'j': case 'J': id += 19; break;  C0 h- M8 o) H. B) `- |) {2 N# K+ F
               case 'k': case 'K': id += 20; break;
0 ?1 c0 R, F# |& l               case 'l': case 'L': id += 21; break;
1 E+ M; m/ l  x8 j: i" R8 ?               case 'm': case 'M': id += 22; break;" u: R% Y* `2 k
               case 'n': case 'N': id += 23; break;
, F. m! {( d. M0 Z# |$ I               case 'o': case 'O': id += 24; break;! Z$ t  L% J) n/ v& `( ?
               case 'p': case ';P': id += 25; break;9 Y. ]* v/ o' ]8 G9 p/ |/ ?
               case 'q': case 'Q': id += 26; break;2 n/ J8 `% ?+ G, x6 j% x1 I" {
               case 'r': case 'R': id += 27; break;
/ V1 S5 s4 t1 G/ C) x+ y: S$ {0 l               case 's': case 'S': id += 28; break;7 t9 ^% D: k& D+ w
               case 't': case 'T': id += 29; break;9 E2 y1 @, {; N0 l7 y$ ]
               case 'u': case 'U': id += 30; break;
' U2 k4 F0 ~4 h/ {; [               case 'v': case 'V': id += 31; break;( S; }" q3 I' M; X' C# I% F$ I
               case 'w': case 'W': id += 32; break;
$ o0 ]8 I0 E6 w/ s" U9 J               case 'x': case 'X': id += 33; break;
( S8 Q; I" Q5 K" z# R2 |- }               case 'y': case 'Y': id += 34; break;
# S6 _% o$ L3 A. J               case 'z': case 'Z': id += 35; break;
: C$ T9 F, s' w. r               default : id /= 40 ;! y% h) G9 R$ b" u
           }
0 W, O7 K2 W, B3 V' R4 Z8 V: \7 U       }7 `' C% D; ]9 V- ?) j+ Q+ F
       if (id > 268435455) id %= 268435456;; \4 `) X' X& m+ x, l) o8 D

( x# x7 d# A6 k, U2 ]//        if ( al1 == 0x58 )5 ^- `! d! j. G  z; A
           printf ( "i=%d ID=%d al=%x,%x\n" , i , id , al , al1 ) ;
; a0 U: {, O! h5 y" ?   }: G- {: |6 X3 ?" W
   getch () ;
. ?0 Z9 Z* `% _7 ?, ]   return 0;0 J) ~6 T" Y: _6 z9 s
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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