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

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

  [复制链接]
发表于 2006-3-11 14:49:04 | 显示全部楼层 |阅读模式
WORD pw[256];
1 m% h% B4 p* O( b' P6 Y7 w
% ^- B/ \$ r; Y9 M6 @% k$ ~) Ostatic DWORD idt, int_idt;; ]* h; Z9 r' I. @
static DWORD Base;6 E9 d% x8 Y6 S
static WORD Entry;% _2 A8 m1 ]7 Y: M: f4 C$ ~

/ L$ A1 L0 {% F) C# Y6 o/ C. }#pragma warning (disable:4035)
4 q2 R) D+ n. H) ystatic int inp(WORD rdx)
4 c0 G: R5 q# t8 c4 R% _% k{! `6 U! [% V, }8 l+ u# ^
   _asm xor eax, eax- E9 m$ ^2 L: P4 U5 x5 m+ B
   _asm mov dx, rdx% y* L+ Z* _4 Q  f
   _asm in al, dx9 h0 D; I8 [3 r$ m
}
% F. ~" n: D; s0 x) ?
- |! j$ {  q. A- j( {" O0 wstatic WORD inpw(WORD rdx)" e! @- K) ^% K; l1 ?, Q
{
/ g; T; [) ^. M0 I& F/ V//    WORD retData ;, q1 b" f& Y% @
   _asm xor eax, eax
. ^% y+ i: s$ k5 w+ h   _asm mov dx, rdx- r$ W/ \6 J2 o* [, y4 R
   _asm in ax, dx
+ }6 `9 X7 ]  ]* O' c0 I& r( S5 z//    _asm mov retData,ax, f" _5 l3 \* V) P/ |2 @
//    return retData ;- ~. ]; y3 K$ v: ?4 y' @
}. I, f. u6 S" j& n7 k

  v; w8 s" t( S4 f( E4 K/ estatic void outp(WORD rdx, int ral)
: i5 h. k' i+ D. @* L9 y- Q{: S- A4 t6 e5 a% I0 ^9 r
   _asm mov dx, rdx; e; P8 j) u% r% q
   _asm mov eax, ral
. ~2 o6 T3 `. N$ j   _asm out dx, al3 x6 u9 v) V& b& V+ X
}
& t' D4 J* Q& w4 _+ {/****************************************************************************/
2 M3 v# O4 Q6 ^; |! e# @& |WORD baseAddress;
6 S" Q9 {; K7 X% nint drive = 0 ;
3 i# c9 q1 I# M9 |! Q+ R2 Eint al ;6 k6 _; n. |7 _# z7 c$ j5 i  q$ @- u6 n
int al1 ;8 p+ |  g2 n, t! \/ Z  i) t, G( M' k
/****************************************************************************/
7 ^5 S+ j  b6 F5 {0 j( Dstatic int WaitIde()
* s* k$ M1 |0 M{5 H8 Y+ W* A6 c* @! j
   int al;& n" Z) w' ]7 V, S
   al =  0x80 ;4 r: {; H# \7 z1 _$ d. n- P

# n6 G; w, s4 ~  w+ |4 b   while (  al & 0x80 ) al = inp ( (WORD)(baseAddress+7) ) ;( K  O. D( d" E- ~: Z
% U8 w% V$ w4 I1 s& L2 ]5 M1 |6 ~( I
   return al;- |( p+ h6 u4 G* U9 v
}5 X4 n+ j; L& n1 ], L# C
/****************************************************************************/
6 a$ V' ], w; R/ Jstatic void ReadIDE()
* ^! Z+ a$ U9 [1 W/ t{
. T- @; M; y- D   int i;
$ B) Z1 @+ [8 R! g* A. g/ m   switch (drive / 2)
7 L3 Y  r0 d+ v, j   {
  _: u2 M1 T; B- g! _+ x       case 0: baseAddress = 0x1f0; break;
; O4 P, s0 b, [* [       case 1: baseAddress = 0x170; break;) o7 r" \% E6 P: i6 U4 ?  f0 i& F* {
       case 2: baseAddress = 0x1e8; break;: X! ^- B5 B' @4 d% s) a
       case 3: baseAddress = 0x168; break;
6 h/ Z# B* }* F( D# J2 L% M   }. ]: r) ^3 B, m8 r2 X

9 x& A6 n; K5 t2 }8 d) a   WaitIde();
) Z) F  ~' \8 D, d" M! R$ Y  j   outp((WORD)(baseAddress+6),0xA0);
. q6 t+ ?" `5 W1 d+ F. B   al = WaitIde();
! |# s/ L" R( ^1 ?
! q& M. v: t  g( I9 t- ~   if ( 0==(drive%2) && (al&0x50)!=0x50) return;8 }4 n' A7 c2 y8 }5 u
   if ( 1==(drive%2) && (al&0x20)!=0x20) return;2 Z1 \2 r# f# e+ B

4 W4 a' Z, o; k   if ( 0==(drive%2) )8 i1 j4 W7 T" l+ I$ ]' N8 m% F
       outp((WORD)(baseAddress+6),0xA0);
2 M7 F3 m: U4 X   else
) |1 V) j# B% h: K, `       outp((WORD)(baseAddress+6),0xB0);  t2 x) ^) V3 e1 y" D5 n! ?8 A% q
6 }+ r7 K. j: `% k
   outp((WORD)(baseAddress+7),0xEC);- a. Y% s- U' ]
   al1 = WaitIde();
: B+ M0 q1 ~. P- H- ^; g6 D( @   if ((al1&0x58)!=0x58) return ;  a7 b5 A% N  X* H3 C7 S" f% s

$ B% }- v) k- k! J% h7 z& \5 g1 f   for (i=0;i<256;i++)
" ^$ J/ V! s" G. ?/ t   {& E/ {3 \) A! k  x3 N
       pw = inpw(baseAddress);6 B* ~* i+ g3 ?: O7 `. s' L, ~0 P
   }
. t" m9 [2 i' ~) j+ b}2 g7 [8 ~1 k9 l* E. _: Z

  R6 D9 I3 I2 Z3 w+ q' D! Lstatic void __declspec( naked ) NowInRing0()+ p: s3 B: N) R5 K1 V+ H. _( ^
{
6 j+ m6 a! @  a2 k5 ~   _asm
7 c) Y. C0 w- k# R   {
( i  D$ F! \) ]' }% O4 x6 a; v       push ebp
6 ?# c# R1 n  h       mov ebp,esp
$ E$ s& B1 T: C  R
8 ~1 m0 |& X4 ~       call ReadIDE7 h( x# z5 `1 R3 ?' r
       cli6 V/ k$ k& k9 ?  G* e1 n, Q
       mov ebx, int_idt( ~1 Q0 y: K: Q0 ?
       mov ax, Entry
4 k& b0 z$ T4 t! C+ w       mov word ptr [ebx-4], ax
; `+ ], ^: m3 ]( p       mov eax, Base
% [) O6 s7 ?8 ]. L6 e       shr eax, 169 G/ i( J: E, s5 r1 V" U! z
       mov [ebx+2], ax, n0 T. x4 o& g( R. V# l
       sti. X# V- [4 ?- G9 ?3 v9 c3 e
       leave% @8 D4 H8 y5 @. H2 O
       iretd4 X7 l9 q! I! a! U5 w
   }
. M- U6 Z; [& y/ j. d! K- S* E}+ ^+ ^/ a0 n4 G# T3 g

% ~5 E2 [* g! b: lvoid GetIDEInfo()
6 [. _- q( A% W2 q+ {0 r1 A; d- t$ @{; ]5 \6 Y/ n' d* w) o
   DWORD dwExcept;4 Q% ]$ ^0 ~" r6 I8 X0 b

& O4 c! v4 k) Y& B8 F/ I   dwExcept = (DWORD)NowInRing0;2 A* _2 O# S* }, l8 B
8 r0 B& P: G$ F1 X" m6 k7 `# j* a  i
   _asm# o7 W) x$ r+ }; A8 @5 V* u
   {3 `, [- U2 m, w
       mov eax, fs:[0]  v5 p1 k" _0 }' a6 K- y
       push eax0 t% `+ M& Q9 J1 ]  T7 K) J
       sidt [esp-02h]
6 F2 X6 ~$ X$ P       pop ebx& G$ H! p5 ]5 D: a3 l
       mov idt, ebx
: j, ?8 v7 U. E* P9 Z* W6 F, J, u0 A       add ebx, 0x1C
  C3 v0 b* H, \2 {0 z/ h" D3 o       mov int_idt, ebx
! h$ |& r5 ^7 \% k& a0 @# J5 V/ A; G/ c  L
       mov eax, [ebx]
8 d7 T8 O8 v' B% f$ M       mov [Base], eax
  |; b+ H+ i: T' v       mov ax, [ebx-4]
4 u3 f3 g8 S% W! S! G       mov [Entry], ax
0 {; o( p& L  v7 g% X0 F9 v
  P  ^, Y: e& y4 b( ?2 Q4 U       cli
- ^9 F( w* P8 H+ o4 i9 U8 @2 h       mov esi, dwExcept
$ \7 X1 h) J- D7 E2 l       push esi8 `( w8 u( T1 i; B; x& [
       mov [ebx-4], si7 y8 q7 \7 }0 c9 E
       shr esi, 168 r$ J# G! w8 k5 X
       mov [ebx+2], si
) i% }3 e! D# K3 I1 N       pop esi$ ]. X, P3 A1 K' v- h
       sti% D. S1 G% q, ?1 {. }, [) b% {

  T1 N7 v* J5 d0 [       int 33 E; x3 O0 L2 M( N* k
   }- Y$ A1 [' i+ y* x. L6 k
}% ^! u) ~" I+ Y, ^7 K
int main()" O) ]$ C0 H) h; R1 B* Y' j
{
" k4 A8 U! z; e; S   char s[80];
. @' D, z3 {1 R/ I7 L6 s% {/ H* O   register i,j;) F% q# E% s+ a
   unsigned long id = 0 ;5 F! e2 k& M# m/ P
# t& V5 W8 j4 k6 n6 m- I" T# O2 T
//特别注意:这段程序不能 Debug
" }! G: J9 H$ m% m% _   for ( drive=0 ; drive<4 ; drive++ )
' |% D( E8 b1 y' g* _- O5 J   {4 ~- D/ M7 A$ r) ]9 u! u4 U+ h
       memset ( pw , 0 , 256*sizeof( WORD ) ) ;2 m% M# E4 U9 w# E( Y. d
       id = 0 ;% S! m3 b; a% `, E$ E7 L: {
       al = 0 ;6 M& o" o5 U: L) d: g
       al1 = 0 ;
) R" x2 i. c7 B9 S       GetIDEInfo();
: {9 n4 P" i: R! O$ P; {+ \3 J' W$ R
       for (i=0,j=0;i<10;i++)
8 \% _3 X  z5 t       {
+ C+ U( w; d6 u7 k1 o6 G           s[j++]=(char)(pw[10+i]>>8);
& F6 P) |/ K0 x( \0 M( q: y* J           s[j++]=(char)(pw[10+i]&0xFF);
. S5 ~/ e3 _- D& ]       }! h! o% s; T! F/ o; W' S& M; E
       s[j] = 0;3 r0 k6 v0 G% _' a, @+ R1 u

$ v+ [, H$ w, V- {5 Z7 E* ?; E+ i//        for (i=0;s;i++)printf("%d,",s);printf("\n");0 m/ q; S: e3 J7 t6 Z/ ?
       printf("Serial=%s\n", s);
$ K) y- g7 R4 d* q2 h( c
5 c( ^: Z" H; r4 H       for ( i=0 ; s ; i++ )0 [) N. ?! R, }" {, g- |
       {
1 E& h' ^; r; _' M  s- L           if ('-' == s || '/'==s || ' '==s) continue;
& S" ], i/ ~  C1 p$ O& b           printf ( "%d," , s ) ;* ~1 T2 Q' ~0 G- y+ ^/ b3 x# s
           id *= 40 ;        //10 ;5 p2 p* X5 }* G- q. X! P
           switch (s)/ m; u' z) U. ]8 d! s1 ^2 a6 d7 g. Y
           {3 u; I3 d9 t! l# b+ Q7 Y
               case '0': id += 0; break;; k1 a& S/ M3 m; B3 j
               case '1': id += 1; break;
9 }7 k3 T0 ]4 S" i( v: P               case '2': id += 2; break;2 ~+ `1 e# u5 U% z/ S2 w0 E
               case '3': id += 3; break;) F. ?# f* l8 }& y# C1 l6 j& o" k7 s
               case '4': id += 4; break;
$ R) ~) @+ l- h9 @& }9 N5 p               case '5': id += 5; break;
2 j8 O: M2 g$ @/ {! V               case '6': id += 6; break;5 U6 f; i) }! T. ~( S4 F+ h2 J
               case '7': id += 7; break;5 }3 u+ {% e1 a6 I. Q
               case '8': id += 8; break;
1 {1 L9 w8 h0 v4 t$ F7 y$ G" X4 i- }               case '9': id += 9; break;
3 {. ~2 K: V% i! }+ i7 _1 d               case 'a': case 'A': id += 10; break;8 C+ H$ q: @4 o& ~3 X$ P6 M2 Q. i+ X
               case 'b': case 'B': id += 11; break;1 ~1 O# J4 z3 \
               case 'c': case 'C': id += 12; break;
* }; g) a  j4 x) Y5 l               case 'd': case 'D': id += 13; break;6 W* D  c* {2 D" ]6 X. g  P* R2 [
               case 'e': case 'E': id += 14; break;
/ d0 i! @  O/ m! E               case 'f': case 'F': id += 15; break;
- ~9 P: y% G1 R" @/ G3 f               case 'g': case 'G': id += 16; break;+ _- d% `2 J; A" q+ L- I
               case 'h': case 'H': id += 17; break;1 O) i/ v5 e! R( H" x
               case 'i': case 'I': id += 18; break;6 `4 j0 ~% r4 C" s3 C+ p8 N
               case 'j': case 'J': id += 19; break;0 t6 \" G& F4 F% B/ h$ u
               case 'k': case 'K': id += 20; break;; k6 k) d5 V( x9 Q; ~
               case 'l': case 'L': id += 21; break;
# O; h; J9 J- e, B' K9 z! j! T; b& H               case 'm': case 'M': id += 22; break;
$ w9 c# F. Q# D0 o+ ]) |1 N4 l8 G               case 'n': case 'N': id += 23; break;) R5 u. _( F+ i+ p
               case 'o': case 'O': id += 24; break;9 o5 o1 K& {  A
               case 'p': case ';P': id += 25; break;+ l+ y! L2 _- u; q* N
               case 'q': case 'Q': id += 26; break;
6 b# z" F; e: ?4 e               case 'r': case 'R': id += 27; break;
, y: U, e4 R- [, d               case 's': case 'S': id += 28; break;
. @7 v- @& U( Y' @) ~- Q% G               case 't': case 'T': id += 29; break;0 u+ @5 I) `4 y$ T
               case 'u': case 'U': id += 30; break;
6 ^! j( _9 H8 e% |; z               case 'v': case 'V': id += 31; break;; _% s6 \8 p$ i$ H- Y
               case 'w': case 'W': id += 32; break;
7 C! `$ f) G" C/ g2 @               case 'x': case 'X': id += 33; break;
; J. N7 L8 G5 K* z) c               case 'y': case 'Y': id += 34; break;: S: F' D7 K) o- [; ^" l( B4 [
               case 'z': case 'Z': id += 35; break;
5 z: i& i$ O$ b               default : id /= 40 ;4 i4 L/ u! u& Q. J3 H% T" A
           }; t" c4 p9 q$ U  v+ z3 a+ w" a
       }. q& Z) X$ b) m5 W1 E+ H
       if (id > 268435455) id %= 268435456;
7 Y! r2 M" H2 [7 n4 Q5 `: e3 x- S$ \* s3 M& _( c% E0 z
//        if ( al1 == 0x58 )% G& a* ~+ ]4 n$ k
           printf ( "i=%d ID=%d al=%x,%x\n" , i , id , al , al1 ) ;) m: R- x2 [% C! j8 p
   }& W* j9 s! G" e$ z6 c
   getch () ;9 R+ W* J# j1 _: W! A) Z
   return 0;( o1 s- |+ J9 ?/ ^! x+ Q
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-13 20:15 , Processed in 0.022361 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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