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

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

  [复制链接]
发表于 2006-3-11 14:49:04 | 显示全部楼层 |阅读模式
WORD pw[256];
, b6 l3 Q, X5 ?& B* \% N) X$ I$ v! l: ^; h
static DWORD idt, int_idt;
. R: g& t5 n1 P+ S0 M! q5 B/ tstatic DWORD Base;% k8 T4 d+ f1 ?  A% u+ A* N: X- ^% l
static WORD Entry;
" x, f& J+ H  N2 U% ^& u3 Q0 l* @7 v2 y7 h* R
#pragma warning (disable:4035)
1 u1 y7 ?" u! x$ h9 Y) y; Ystatic int inp(WORD rdx)- `7 L- X/ Q/ o9 Z8 P" d
{/ g* h2 W' N  _
   _asm xor eax, eax
' U: |4 \& u- y) V   _asm mov dx, rdx) U7 g* N6 Q+ B* `: {* E/ B5 \' l
   _asm in al, dx
: Q2 w% g1 |# Z  K8 Y8 c}
/ w  Q# a( N4 r6 v4 T9 P
8 g% g/ F, z* i. `* I( c, B  Nstatic WORD inpw(WORD rdx)
% v5 x% |8 }! \; L0 i, b$ E{% h: X# R6 K& I' e
//    WORD retData ;
: O7 S$ Z: b' V4 O* j' N8 H  J   _asm xor eax, eax
- V1 ^% v1 P- W/ T/ |" Y   _asm mov dx, rdx4 R/ \  G/ u1 a+ c. ~
   _asm in ax, dx  y8 _1 x; ^' b/ x
//    _asm mov retData,ax6 r1 g& K/ C( \% n% J) n
//    return retData ;
8 a6 w/ r- k. z- Y9 c1 B0 m}& N2 O8 N6 y/ O& D) j

" f1 m$ b, ^8 k+ ^' K8 e1 {1 Fstatic void outp(WORD rdx, int ral)$ g" M( R. |1 v) A
{
4 I; x$ B5 F9 f5 S+ W) G4 H   _asm mov dx, rdx. `7 D9 J8 A. |- G3 }. t* R4 }
   _asm mov eax, ral
# w$ a7 ]* h% e   _asm out dx, al
0 k% ~* S, R6 z6 T* O0 ~6 E- _" b}
- O. d/ P' N& [: j) G: g8 u+ [' v1 M/ D/****************************************************************************/! f! ^* n4 q( ?! u* E
WORD baseAddress;
, J8 v! G3 }5 q+ X% _( [int drive = 0 ;
7 X% e% Q7 i: A3 h) qint al ;) o1 b" Q6 Y2 f+ V# a' g
int al1 ;; w/ I) z: @  ^1 q
/****************************************************************************/
3 l4 E# z! b, I' a) r' |6 Qstatic int WaitIde()* O' O' q% G" @8 z3 v2 e
{
$ E! @! T- @6 |6 I   int al;, I( _8 W0 x4 g  z5 ]) `9 P
   al =  0x80 ;3 y2 V# X0 S! n- W3 k

8 O4 O3 _  A0 |2 `3 u5 I: a- G. {   while (  al & 0x80 ) al = inp ( (WORD)(baseAddress+7) ) ;. ~  |( ^9 n! h+ u: Y6 ~( H4 Y

. T- W! a$ i& `( M/ w( I# D   return al;
$ V" A& O( ?; B' i: _  Y}
0 I5 ?  `: h' L+ x$ Y/****************************************************************************/7 J8 l& b# i* p1 |0 j7 x" U
static void ReadIDE()
5 l1 s: B, p+ c5 G2 a{
1 L* C8 L, ?( i; X5 ]   int i;' l( Q$ G, J: @) D
   switch (drive / 2)
$ O: ?( G/ h6 Y7 Y: E   {  e. A9 w( r$ k  I$ X3 _! c8 w
       case 0: baseAddress = 0x1f0; break;
0 i2 K4 |; O& J- W7 c' d       case 1: baseAddress = 0x170; break;; }7 k8 Z5 }5 Y* E# E0 ~; _
       case 2: baseAddress = 0x1e8; break;
# S+ L) w# W7 z! [9 F       case 3: baseAddress = 0x168; break;
  ?, L% K+ }& L: f5 P. d4 T   }+ V' b" y4 w3 F# W5 T- Q5 F

2 j; h- o- p* w+ B, c2 |4 V   WaitIde();
# M0 ]- H& g" |5 H" J   outp((WORD)(baseAddress+6),0xA0);8 Z" ^5 G  C3 z; k
   al = WaitIde();
# i; r" x1 v) f+ H# I9 f) ]: Z/ k- K% \! q. |9 _6 x
   if ( 0==(drive%2) && (al&0x50)!=0x50) return;
3 e4 h4 d" u6 h) D# k% p1 |. E   if ( 1==(drive%2) && (al&0x20)!=0x20) return;8 V3 t8 F5 K1 w: p2 t0 M8 v3 p

% M0 g5 Y# C$ c/ ?2 k   if ( 0==(drive%2) )
$ z! Q/ u$ P5 t5 d       outp((WORD)(baseAddress+6),0xA0);
6 e+ J2 Q  H7 N, e: b% ~5 Z   else8 B) z; G6 K& \* F
       outp((WORD)(baseAddress+6),0xB0);
; V- ?( f; ~6 M1 d" w
/ K# P* I- x5 d8 o1 s( H1 z% V   outp((WORD)(baseAddress+7),0xEC);
. C$ k. i" c; Z/ ]0 \+ }   al1 = WaitIde();
, Z: x3 _3 A; m/ N+ p! }4 N* W$ t   if ((al1&0x58)!=0x58) return ;9 Y* g' G7 @% D$ b

$ T, }+ s3 d6 y9 t7 x   for (i=0;i<256;i++)" `, i3 k% a; B( O& J9 \! K) @; z
   {0 Y1 `9 T" t" u/ ]
       pw = inpw(baseAddress);% W# C/ e5 ?( y5 q3 Y
   }9 O# \, n- N7 i7 Q9 B
}) H, P& h! n( a, G. p  I" p
) i9 X7 M% P' d8 y% i6 s4 W
static void __declspec( naked ) NowInRing0()
1 W' _& |, V7 c! I1 F- A/ K{
) {& u+ u, h5 L  z& M7 X3 A- X   _asm. P+ {/ U9 ~3 A  r9 K7 d/ K# F( w+ {
   {- R, k4 B! \, S( C* b, v$ {1 g
       push ebp- ~8 x9 Y' D( y' ~. V* p
       mov ebp,esp
6 H+ u" W4 |9 n. f: g0 J2 X  v) ?% `7 p
       call ReadIDE
8 W2 }* |* r& f       cli
0 f  C% C$ H0 w       mov ebx, int_idt/ m6 ^# ]0 `4 i3 M/ w* x
       mov ax, Entry5 g  t* }2 Z: H
       mov word ptr [ebx-4], ax, P6 \3 v' l% [, l7 z
       mov eax, Base
3 W" p6 i. M4 ?3 |7 N, L       shr eax, 16# w) e% o) S0 D
       mov [ebx+2], ax
% L: n# T! R: U5 C8 k       sti6 E+ v+ w4 L6 L- d
       leave
* u) j6 z1 s( p: x* i       iretd& O/ ^. W$ y" h1 K) g5 w
   }
- I5 {* ]; h% I}
/ z( E, A, L# x+ w. N, e. x, S' y% z# w% V7 e5 ^$ m
void GetIDEInfo()8 F8 e) C' }# q( R( W& t
{
1 F& q) Z  B7 m; d& h1 q7 [   DWORD dwExcept;
& \3 X# y+ \7 o+ w& z
! f$ Y3 p5 ?" T" H! U+ U- S7 Q   dwExcept = (DWORD)NowInRing0;2 v: K4 O4 p5 r; c  T! X, t

' H. j( T# k& D6 j   _asm
- ]# i5 t4 n6 b2 S, m   {4 W8 h9 t: M( f3 D
       mov eax, fs:[0]
" a" H; C+ W& ~2 h       push eax% Z# X: C# q: r0 {% ]) l" ?
       sidt [esp-02h]
4 g5 @6 {" ~( `; B9 E# ^4 R       pop ebx
. n' O; T0 D# A- w; O; X8 p       mov idt, ebx2 P% E3 l# J/ M2 K# }# S
       add ebx, 0x1C
7 B' L; R' F. a- R; @! ]       mov int_idt, ebx3 I  ~- ^2 \% z( X2 Y
  j$ s6 \: n% j* P7 m  O
       mov eax, [ebx]
8 u* y) ^6 T. K/ h       mov [Base], eax
5 T' D4 @- N, ^7 W8 A& `6 [       mov ax, [ebx-4]
6 [5 S, R" B# h" N2 F, o       mov [Entry], ax2 ~. K! l9 _: e9 B4 w
( l" j$ X! [6 n+ s! k
       cli0 U! d) w- n& u9 E
       mov esi, dwExcept
) y' b/ i+ j# S. i. ^       push esi
7 N& ]& i9 b: h$ s# J- `2 k       mov [ebx-4], si
/ J" O! a3 U  |; _. r$ R       shr esi, 16# v1 `2 v& h. L- Q5 |" y/ r% _: H
       mov [ebx+2], si" t) r$ S/ n( K4 v- q
       pop esi3 l' J' {2 r1 c7 R  _
       sti9 F- c2 b6 _& S8 o3 T
# e7 w( q; z. [. z8 L; M9 W3 r
       int 30 v' i8 O$ E- S$ v/ H& h
   }" H" G% i2 P$ h; i. g
}
8 C" M& u8 e) b, F5 Iint main()
. s6 x8 F; w) d4 U) k2 R8 J{3 R- e' l% v. [4 R
   char s[80];6 S2 D1 [5 j5 Z# X* U
   register i,j;5 p4 G; J& @8 O2 R
   unsigned long id = 0 ;$ \; g8 O9 j; I- Q6 V

; ~0 q& V$ |5 {8 `( G//特别注意:这段程序不能 Debug
. c0 N2 }2 n; Y- v' M$ c: a; g   for ( drive=0 ; drive<4 ; drive++ )" q4 J" R+ R5 g% c; ~
   {
  h& w6 o( i+ G' ?! u% a$ T       memset ( pw , 0 , 256*sizeof( WORD ) ) ;
, K: `2 H# b! N       id = 0 ;3 `& p1 k. U: a0 i. L, u
       al = 0 ;( P) k0 `5 d9 ~% R8 ?8 k
       al1 = 0 ;
$ O/ s2 H# S+ R9 D$ ]       GetIDEInfo();( _+ b* t8 f+ Q9 I  q, _: A

- k5 t4 t5 |# Y7 k       for (i=0,j=0;i<10;i++), S7 {% }# q8 g, p' I
       {+ S. U2 \, B: m  ~3 Z! O
           s[j++]=(char)(pw[10+i]>>8);  F$ v' I$ S% x/ n( Q5 Z2 W
           s[j++]=(char)(pw[10+i]&0xFF);
# Z( H6 D* {6 x& J0 G1 f       }& A. p: q" z$ g) X% K: @/ A5 q
       s[j] = 0;
6 M8 \# _% x6 r3 M- @* n! y. f0 H8 u7 ]  m# |5 s( C- h- V
//        for (i=0;s;i++)printf("%d,",s);printf("\n");
+ `: n! U1 g6 A$ E9 }5 N( F* p4 \2 @       printf("Serial=%s\n", s);
% d2 P$ i# P: ]# p
- v7 ^+ s% P3 b0 a! h! L       for ( i=0 ; s ; i++ )
( G9 q5 @: W) A. F: L       {
  m) a' L# }0 M, ^4 g           if ('-' == s || '/'==s || ' '==s) continue;
3 C: o9 a# _' T7 E! Y# p" `           printf ( "%d," , s ) ;. c& l( I2 P* E" S# o
           id *= 40 ;        //10 ;% t& y9 l  b+ s4 B
           switch (s)  ^5 {, y. {8 N0 W/ h0 i9 P+ T
           {1 n. Y( X+ Q$ q; j) H7 W" x
               case '0': id += 0; break;
- X( A. A/ j" g1 Z' T0 j               case '1': id += 1; break;
$ ]) C: k1 @- ~               case '2': id += 2; break;
# q# [8 N) L- B- p               case '3': id += 3; break;
7 h7 F+ y2 s- i/ j, _  B               case '4': id += 4; break;
3 r7 o& ?7 P! T) `- N4 N' Z, w               case '5': id += 5; break;
) t4 Y4 {+ k/ j               case '6': id += 6; break;% t% E, ~0 n3 h$ y
               case '7': id += 7; break;
2 _) x- K$ S( w. Z) D5 n5 S+ _; ^               case '8': id += 8; break;8 U) F" u2 v: s  v, E# @' z5 V
               case '9': id += 9; break;
% W4 g& c' v. I& g! q$ Z               case 'a': case 'A': id += 10; break;
$ Y' U# b0 Q. \0 g" P- `4 S  f               case 'b': case 'B': id += 11; break;  @! }1 w; N6 g* u
               case 'c': case 'C': id += 12; break;
6 ~3 z8 g: n" Y# n" B8 _               case 'd': case 'D': id += 13; break;/ G+ t4 S$ b7 Y" s" D
               case 'e': case 'E': id += 14; break;" }; B: L9 ^. W  Q3 k  \- E
               case 'f': case 'F': id += 15; break;
5 v; ?( q5 k% j               case 'g': case 'G': id += 16; break;5 E* K% \7 h; \& Q7 U- }) O/ {
               case 'h': case 'H': id += 17; break;
) ?% a( O" j: A1 n5 J* r               case 'i': case 'I': id += 18; break;
. I5 H  {' ^7 X$ n  D               case 'j': case 'J': id += 19; break;, F6 @3 \8 o7 L8 ]1 M
               case 'k': case 'K': id += 20; break;8 l( U; x* m9 _8 h3 ]1 `
               case 'l': case 'L': id += 21; break;
6 U* F" h! q% r9 ~6 ^! G& l) {               case 'm': case 'M': id += 22; break;+ ?" K+ i% B$ s  Q# i* F# M
               case 'n': case 'N': id += 23; break;& M1 Q) a( X7 I7 p
               case 'o': case 'O': id += 24; break;
5 t+ I% s" B' J, E5 R/ G: ?! y               case 'p': case ';P': id += 25; break;3 ?% W. f" d9 E/ u% ~6 X2 O
               case 'q': case 'Q': id += 26; break;1 X7 S1 r  X' {" t) U5 r
               case 'r': case 'R': id += 27; break;, b) v7 z, k+ S; u! ?
               case 's': case 'S': id += 28; break;
  M$ E6 T$ g6 x               case 't': case 'T': id += 29; break;
1 C( E/ N) {, d: i' t               case 'u': case 'U': id += 30; break;" `- F4 \, A' Q# g
               case 'v': case 'V': id += 31; break;9 {3 R1 K1 O" Z! _2 T
               case 'w': case 'W': id += 32; break;# c8 v& Z( K. U: b& V0 V0 e4 S
               case 'x': case 'X': id += 33; break;
0 K0 z9 R' c3 e! K6 `4 V- R& i& q               case 'y': case 'Y': id += 34; break;
- J, }" ]* A: |! f5 S               case 'z': case 'Z': id += 35; break;8 d; M1 ]" ~9 W6 S+ m! k  H
               default : id /= 40 ;
, D) T% e% t: l6 C3 p0 o" f           }
' y; o) P* B; U1 t5 O' b8 k. Z* Z1 `       }  C0 u0 n* [) Q
       if (id > 268435455) id %= 268435456;+ v2 a7 a& o5 ?3 Q; W) w. R' z) g

& b1 F* [3 `+ l0 e//        if ( al1 == 0x58 )
4 Y1 y6 e' D5 x$ t# _& f5 I& I% w           printf ( "i=%d ID=%d al=%x,%x\n" , i , id , al , al1 ) ;
4 u, x% x# I' A' U   }* r8 T/ M5 o# \# F- ~; v
   getch () ;" d) {3 q5 w* {
   return 0;) T$ R" c: D- V3 a9 {
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 01:39 , Processed in 0.034816 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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