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

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

  [复制链接]
发表于 2006-3-11 14:49:04 | 显示全部楼层 |阅读模式
WORD pw[256];- w1 E( p' k1 J" i  _$ Q2 U# u8 A
7 l4 L2 a5 q; B
static DWORD idt, int_idt;
& R1 @! ]9 U1 Y& T  M3 e. ^1 i3 qstatic DWORD Base;8 N7 d: q) a+ l7 u  e# g+ H2 ?# J( j( y
static WORD Entry;
% c5 k: l. T/ p3 _8 c7 V
8 ]# b9 d, ]5 C#pragma warning (disable:4035)
0 k, @! V/ y4 wstatic int inp(WORD rdx). Z! z; I9 X; d0 |1 B" g& e
{
0 Q- Q' m5 ]# ~+ [9 Q   _asm xor eax, eax: ]$ O$ L% V3 D- l2 `! e5 @' H
   _asm mov dx, rdx1 C$ J7 m6 V- k1 N
   _asm in al, dx* P* {) p/ [! D4 R; \; B
}/ c( k4 \( v3 W: [# ~' \. u  [

0 w- S3 g% D$ f/ bstatic WORD inpw(WORD rdx)
( Z. C$ W9 k1 K! L' s! s/ o{
+ n' Q8 V4 C; z% C//    WORD retData ;1 k/ G3 I! y' R$ I
   _asm xor eax, eax6 y6 e* F0 P9 e  d+ r
   _asm mov dx, rdx  f7 k# X+ H- I
   _asm in ax, dx2 C+ y5 p! D4 P3 k! @' C& s
//    _asm mov retData,ax( o3 Z% W8 {; X* ?0 J) q2 Y
//    return retData ;7 d  n# B& p- }5 C: t
}3 r: h- \: P6 p8 y$ M/ r) B( E1 Y
3 i+ A3 j4 Q: b; y0 d1 e1 ~3 E
static void outp(WORD rdx, int ral)4 s! j8 g3 _# p. P5 `! L; p
{
5 j9 \- Q/ T8 t2 z8 g   _asm mov dx, rdx+ c$ D  t$ H, v" v- j
   _asm mov eax, ral/ o' q! g5 |7 J
   _asm out dx, al
" e4 `% |5 k% N7 L}6 D) C) L2 l: y5 n. @
/****************************************************************************/; h  x2 B8 w3 a( H
WORD baseAddress;" u7 }' a/ o2 k- C
int drive = 0 ;
2 z: a+ a7 ?8 O* d. X$ H; Xint al ;. [" x  l' }; e
int al1 ;7 `- V; \; D& q
/****************************************************************************/) ~+ e) B* B4 p4 @
static int WaitIde()! P( H8 \, T2 k( [
{
. P6 [: i, ^# B. j( Z+ B% T   int al;
3 L8 H# c6 g9 J/ d. e! x   al =  0x80 ;
7 _! @, E( x. Y3 k6 t; |0 o+ ]7 P2 Q: ?
   while (  al & 0x80 ) al = inp ( (WORD)(baseAddress+7) ) ;1 M  g' a0 T0 t5 i2 f+ o3 O7 J: i
" ]/ J' E* @" b$ F; `/ I
   return al;
  m/ L1 I5 T6 ]- }}
* @) q1 _% U% ?" ]/****************************************************************************/
( J6 a0 \! z; {2 ystatic void ReadIDE()7 f5 `+ \, I; o8 L; l
{; m. W  [2 B: m( x8 S& i# p
   int i;, l$ z, d( Z& B9 T2 Y+ }
   switch (drive / 2)
& F, M1 K. h2 ~, J- |   {9 l4 p4 a! y  I5 K+ E( v6 o6 \; A
       case 0: baseAddress = 0x1f0; break;
1 T7 k, S6 [, Y  F! `3 h       case 1: baseAddress = 0x170; break;- k0 j1 t  _8 P: @/ D! {; |) J5 U
       case 2: baseAddress = 0x1e8; break;
0 u& r! l( |2 Z       case 3: baseAddress = 0x168; break;! Z9 G) w; B* H0 l( c; A
   }
- v/ K  s' O( m7 W1 w0 m8 k' G2 e9 H, \$ E/ {+ X1 |* M* l
   WaitIde();5 E$ S& K" I3 _4 N
   outp((WORD)(baseAddress+6),0xA0);
8 x  H* W0 u" O; c4 m" b# \, y0 p   al = WaitIde();7 D7 X: [% C! j, t# `
$ f0 U% l2 R4 x
   if ( 0==(drive%2) && (al&0x50)!=0x50) return;& b+ n& O9 \7 a+ Q% F. b
   if ( 1==(drive%2) && (al&0x20)!=0x20) return;
# j4 g( ]5 M! h2 J9 N$ H! p2 L
6 v# ]$ v6 q( G1 h" u' ^3 }   if ( 0==(drive%2) )
. @6 \* g8 c" D8 H* t8 K, i, `       outp((WORD)(baseAddress+6),0xA0);5 e1 d, E; e; K( t1 O
   else# B: H* c  l# t/ g  R6 a, b2 g
       outp((WORD)(baseAddress+6),0xB0);' ~/ k4 y/ S# h% t/ s
5 h5 e  k, t, Q' C2 G# n) |
   outp((WORD)(baseAddress+7),0xEC);
, U% g( z8 t! J! b' S% z4 d! r   al1 = WaitIde();8 R4 `6 G) ]# t9 E* @
   if ((al1&0x58)!=0x58) return ;6 Y* q" O# Y6 ?7 k8 \; v: r4 x

- i8 T- q' W: q   for (i=0;i<256;i++)
' {- j, w8 o0 s. w   {
* P1 C6 u& d: ~5 t! ]       pw = inpw(baseAddress);
) h' m& ?; |% b   }4 g- \) x. f6 O5 K) `
}7 y- _3 n' B* C9 Q# `# @6 Y; g  u

' J! M* h7 D+ ]static void __declspec( naked ) NowInRing0()- @8 E. T( u, W1 v; j4 V5 [3 O
{
( z+ g3 \& u' x& Z, D# q- }   _asm- o& B( @  n% K: T& g1 _8 v
   {
. M( B" R9 Q7 c8 v4 p0 ]* U6 V8 J       push ebp, s9 k1 G; ~$ ]% L; y6 g  R) Y& X
       mov ebp,esp7 D& v; p% s" ~& l% T; j7 K

3 H5 s: w1 z& O/ |: S       call ReadIDE* X% [8 J) r  T& ]. Q
       cli' F' y0 [% \9 ?& d* O+ I$ g! z
       mov ebx, int_idt) Z6 x. N7 K. b7 o% t  D
       mov ax, Entry+ W! W* V% p1 h% ]$ }3 J
       mov word ptr [ebx-4], ax
. f  v, J4 \: O& O' i% R       mov eax, Base; B( F9 }7 x6 T' d8 U% Z# S7 ]
       shr eax, 16- ?, C* _3 L2 i$ z( C
       mov [ebx+2], ax
$ ^2 L% Z% N9 m( b, ?       sti+ L. _. E: e& D% L- @- Z. [
       leave
, w; p( D) L( K0 P" [       iretd$ {3 `( C& |5 Z2 r; x' P
   }5 V. K. V; g- }$ Z
}
7 M" l1 o# c6 I0 F+ g. R' D
: G" ^( z! w/ G2 kvoid GetIDEInfo()
7 s9 w2 @: E3 J4 j4 ?{' G; F0 l0 y. C& J
   DWORD dwExcept;
% T+ E8 [2 S/ h% C2 y  g2 m1 L7 Y. G) I+ l* D
   dwExcept = (DWORD)NowInRing0;
/ G* l' p- s# F  L* P0 L) A. G) V1 `2 L- R/ f; ^/ P
   _asm
4 i* c& T& I( L0 J" L, j8 H2 ~; `   {
" K6 _3 M' I1 F$ [: e) h& _       mov eax, fs:[0]
1 E8 ~; s2 u8 R       push eax- O" s" F/ r* o$ K
       sidt [esp-02h]' x: C- x: O6 p! r8 P
       pop ebx; g9 q# _9 ?( g3 g
       mov idt, ebx) g& p. r; ], t0 G; k5 w7 {
       add ebx, 0x1C( |* b: a  [( ]2 R
       mov int_idt, ebx" x: L6 m0 k9 m+ i

1 c. L; _$ y& H0 u& e       mov eax, [ebx]+ b- ^0 D8 T, r. Q1 }
       mov [Base], eax& @: ?, D5 F6 s$ N% U6 }% P
       mov ax, [ebx-4]
: W  A& A- M! R" O# o' ~$ M& ~       mov [Entry], ax
/ ^3 T* ~1 r9 `0 p. K7 k5 O# _4 T( m5 @: K" B9 k" M. ^% ^/ i
       cli' K3 g+ ^/ u- ]* a3 _) ?7 g
       mov esi, dwExcept
$ r* |- ]' t5 y* z: D. n       push esi
% T: R. E5 p# D# I& Q4 L       mov [ebx-4], si
4 X8 v# K. {5 C       shr esi, 160 n; k1 H( g3 R7 W* v" J! s
       mov [ebx+2], si* V: o. I  X1 d
       pop esi
! v, l) X# D4 w" K$ x9 `! |       sti
+ y0 i# X% ?; X& O0 ^' A2 Y' ?4 n* n+ o$ a% F
       int 3* z! Y+ l6 ^" t: C# m
   }9 x0 T9 _& r: O. ^& p0 J0 J
}0 i3 e  B0 [0 i
int main()
$ T) c& E5 K9 l{
2 R$ H  R  |- @  O6 l* [   char s[80];9 e, f2 t' D8 y4 ~# j  l( d
   register i,j;
) j7 z8 z; I7 P, G   unsigned long id = 0 ;2 M! r8 J( {! v+ G8 E

5 B2 `1 {& O* N4 U2 q//特别注意:这段程序不能 Debug! @- n7 O9 F9 N$ I. w
   for ( drive=0 ; drive<4 ; drive++ )6 R: l& w6 i) \) |. x0 M6 ?" i
   {5 S; S, j* _  g( X/ [0 E
       memset ( pw , 0 , 256*sizeof( WORD ) ) ;" i  G$ s# x+ N1 {
       id = 0 ;, ^& d4 D. [' w4 _* v4 \
       al = 0 ;
0 e: h; ?9 H3 Q2 o4 D       al1 = 0 ;( V* j3 O6 n! n. p. R$ M
       GetIDEInfo();
6 O# |2 X% ~# @9 l0 D+ f. i( _: L) o/ K
       for (i=0,j=0;i<10;i++)
( z2 G3 g8 L2 X6 t' a# t3 V       {7 `8 E+ A, q0 m* O# u* j$ h
           s[j++]=(char)(pw[10+i]>>8);: \" w& S' E  H2 {. _. i# r- Q  N$ N
           s[j++]=(char)(pw[10+i]&0xFF);
" L% d, z% [8 T0 [& A- Y       }( _5 |& }- w3 Y, V! L, O
       s[j] = 0;0 r! H6 @; f- z4 o  x1 u
2 M0 O# t7 q* e3 P9 r: `/ x8 z2 N
//        for (i=0;s;i++)printf("%d,",s);printf("\n");
' {& ]/ B( a  x1 Y" U; i0 `       printf("Serial=%s\n", s);
% {8 |8 x& \+ r1 j# y1 z* j  W* U* s- l! T- K
       for ( i=0 ; s ; i++ )5 L* j* ^0 [2 P: e! }# s
       {7 O4 j  h, g" h- y
           if ('-' == s || '/'==s || ' '==s) continue;$ [# M* Q: @0 o
           printf ( "%d," , s ) ;8 F9 p8 S$ j, ]6 y- v
           id *= 40 ;        //10 ;
) c) Q! R7 t, E9 b( y8 ?           switch (s)9 p# Z3 f1 O$ x* T
           {
: e- ?1 P6 B* l7 R- g; u7 p& Y               case '0': id += 0; break;- ^6 w0 A' F' x* [: ^8 c! u
               case '1': id += 1; break;
+ ~" t0 L  O8 ^1 D  v0 m8 U# n               case '2': id += 2; break;
0 H: a8 u# O6 T' b! _% e1 ~               case '3': id += 3; break;
1 q& C5 N9 x! C- g' k# C               case '4': id += 4; break;
& N1 i9 p0 z! k               case '5': id += 5; break;5 ~+ @9 L% ^. Z0 Y) ]8 L$ y
               case '6': id += 6; break;
+ F7 F, Y! x* S1 |3 @# w               case '7': id += 7; break;
4 I/ H& v$ z* N3 C" w               case '8': id += 8; break;
1 P& ~0 K- V( f               case '9': id += 9; break;/ {( F- _; U$ ?" l, k$ r8 x
               case 'a': case 'A': id += 10; break;) E/ h' U5 F2 l5 z
               case 'b': case 'B': id += 11; break;
2 u5 `) ?# _0 T               case 'c': case 'C': id += 12; break;, ?- |8 |9 H* T1 y
               case 'd': case 'D': id += 13; break;4 p6 r8 q; B( ?& ^
               case 'e': case 'E': id += 14; break;
. z, M: A+ u9 U8 ~! r               case 'f': case 'F': id += 15; break;3 o) c7 E" ^1 ]
               case 'g': case 'G': id += 16; break;
% Y3 P! o* d8 H  G4 P' L               case 'h': case 'H': id += 17; break;
0 n" l# K3 m3 ]- t  k               case 'i': case 'I': id += 18; break;! j) u; C/ S: Q% W% L$ U/ |
               case 'j': case 'J': id += 19; break;
& F; C" @- Z) E* E! r+ T               case 'k': case 'K': id += 20; break;2 \. C; w5 \  [' K+ I  K/ `" N
               case 'l': case 'L': id += 21; break;2 ~8 O7 N! x. O; X
               case 'm': case 'M': id += 22; break;
) ^0 M6 |$ E$ V3 T               case 'n': case 'N': id += 23; break;5 F0 p4 Q; B1 Y& `8 S& @6 R
               case 'o': case 'O': id += 24; break;
; @  i: F% J1 J5 @* ]* X4 h( q0 y5 _               case 'p': case ';P': id += 25; break;
! u, g$ O- O0 I& ]; c$ e5 G4 J               case 'q': case 'Q': id += 26; break;
' B7 A/ z+ t7 _5 n' x               case 'r': case 'R': id += 27; break;2 O9 W7 |* ]+ G# H% K2 _
               case 's': case 'S': id += 28; break;( ~& h; o" u) F1 F/ S4 R6 t
               case 't': case 'T': id += 29; break;
9 b1 {7 D$ S" B8 s- w               case 'u': case 'U': id += 30; break;
* r0 y& s- Z+ n9 q# b9 Z               case 'v': case 'V': id += 31; break;
7 a/ W4 N$ ?) t2 S) Y7 Z3 Q% t8 l  r1 f               case 'w': case 'W': id += 32; break;9 E2 e9 Y1 v  j
               case 'x': case 'X': id += 33; break;8 H4 _% Y3 T1 n
               case 'y': case 'Y': id += 34; break;  X$ R! t! ?5 S" e  N
               case 'z': case 'Z': id += 35; break;8 ^) Q- O" m! K2 n/ f: W
               default : id /= 40 ;0 |( A& s* h' u8 ~! C, P0 m
           }6 ]9 P3 w  @5 W! T
       }
5 x3 A! h) L' D* W, o7 d       if (id > 268435455) id %= 268435456;& p* b+ A3 \& j9 Y, s/ r8 l
" y+ n1 ~  B+ U0 n4 n+ o0 u7 x$ ~1 A2 h
//        if ( al1 == 0x58 )
* ?0 g! [4 V/ B, k! F           printf ( "i=%d ID=%d al=%x,%x\n" , i , id , al , al1 ) ;
. H/ m6 I- e: q0 {) z   }
1 P7 I  J+ K* l7 K; _   getch () ;/ C! W% ?! \5 x. u
   return 0;
% ]( S; e6 s( q  s& P0 c% L; J}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 06:52 , Processed in 0.020706 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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