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

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

  [复制链接]
发表于 2006-3-11 14:49:04 | 显示全部楼层 |阅读模式
WORD pw[256];
, k% i1 ]( z) j
% Z2 |( R7 A% I( ?" _9 a% Vstatic DWORD idt, int_idt;
% h& I" x( {  ^( q+ astatic DWORD Base;# A; Y) p' D: q( }! |) W& I) ]
static WORD Entry;0 e+ a1 X$ t6 E. |
, N$ C6 E4 g, F5 W, _
#pragma warning (disable:4035) % ?0 ^6 E' H8 _
static int inp(WORD rdx)
% b, H8 H: f6 @1 F: I6 M) E{
/ v; f; r( E9 h0 n" g9 T4 n   _asm xor eax, eax$ y- z2 @) o) T" c/ K
   _asm mov dx, rdx" [+ s' ]% ]: K( \- l
   _asm in al, dx! O9 Y/ s$ L& `& Y- |+ @" z( y
}
2 ]; @! Q1 S2 k+ `+ {; h' e# D9 [5 K0 R6 n5 w0 e/ y6 T; y6 j$ ~6 a
static WORD inpw(WORD rdx)( R5 X  |( H7 }  z) ]& w7 l( o
{: P! C3 N4 J  {# x
//    WORD retData ;& y. U; [/ h: n0 Z% S  |( l
   _asm xor eax, eax
: S+ H0 W* O# @3 k$ x, I3 E- c   _asm mov dx, rdx
, u6 w$ x: ?6 k   _asm in ax, dx& d1 P( @/ r6 v& f* v4 G& s
//    _asm mov retData,ax/ Q2 E- Z: c/ D4 P
//    return retData ;! D4 z- W* `+ O1 ], K
}4 b( D6 v/ a# u, g; r# m6 O; z; p

3 X4 a: r( X( f& M( S# rstatic void outp(WORD rdx, int ral)
: x0 C5 G1 C& P( _{3 r& o& g* e+ ]
   _asm mov dx, rdx9 t' Z  y0 h. h. k4 E* i
   _asm mov eax, ral
* X8 b( \; d) g" Q/ j: P   _asm out dx, al2 l1 l, i) l- n! C
}+ j" x) p/ i: a( l
/****************************************************************************/
& \/ S/ l2 M, @, J$ h" @/ vWORD baseAddress;7 r0 w  J/ H  p+ n6 t
int drive = 0 ;
  M) C/ U+ p/ Z+ {5 j# \int al ;
2 T8 W6 h2 e" jint al1 ;
: {7 W+ @. h' a/****************************************************************************/$ d( M; C8 ?) m& B9 A6 v- d
static int WaitIde()
5 c" ?+ i3 H% W+ d& `( \2 }{
8 g) x# E9 v, M# Z8 D- O, ~   int al;+ L( f. ?+ J5 P0 Y" q6 n
   al =  0x80 ;
, e* ]; M8 C2 p% y* \
. S9 Z9 y8 c1 q8 i& z, a; [7 ^) U. F! c   while (  al & 0x80 ) al = inp ( (WORD)(baseAddress+7) ) ;
6 b' ?: M0 l' u4 M
2 J: ^0 z: M9 y/ ]0 y) H( {0 {   return al;0 Q9 F6 l. k; a$ B1 t9 ^& j. v
}
0 _& |! ~. H' X. ]% ]3 }7 a. V, D/****************************************************************************/
. J( y& F$ [' i. y: j5 h- gstatic void ReadIDE()$ [+ S+ U9 t( w
{
& M3 o" k& b" S) z; v   int i;& F' L' C( q, z
   switch (drive / 2)0 y8 i# [; Z" K' q0 f  r
   {
; B/ G$ U1 R4 d9 B0 E) \# s; x, V       case 0: baseAddress = 0x1f0; break;$ S6 e3 r; K: ^/ q2 R
       case 1: baseAddress = 0x170; break;& c3 v7 B; R; ]4 T3 g# ^( H( ]
       case 2: baseAddress = 0x1e8; break;; O: [& ~8 |$ x" W8 P
       case 3: baseAddress = 0x168; break;5 |% h& b9 U: d  Q2 p/ f9 v8 x; [
   }
$ A+ M- n4 Y" O& x
8 D$ J! M7 p+ U5 P$ Q   WaitIde();6 G/ `0 n; {8 i* x. ?8 d
   outp((WORD)(baseAddress+6),0xA0);1 f, f% X( \' a! u( ~- `
   al = WaitIde();* @* L, Y/ _9 Y8 |8 {

4 {+ W1 t  A0 h8 {# w# @   if ( 0==(drive%2) && (al&0x50)!=0x50) return;. @$ K0 n) e5 j  ^3 ^
   if ( 1==(drive%2) && (al&0x20)!=0x20) return;
: a+ F- W3 W0 P9 E: Z$ y- X$ B5 L$ a; }
   if ( 0==(drive%2) )
7 v* a9 E' {/ ~$ z5 R       outp((WORD)(baseAddress+6),0xA0);" P, k: k( j- X% }
   else% @% b% F  f+ {; L% X
       outp((WORD)(baseAddress+6),0xB0);
( v  k& X5 e% V4 |& B) b& p8 i" M# i* O) d0 C
   outp((WORD)(baseAddress+7),0xEC);
6 c* @, H5 _0 M: r5 s: |* R( Y   al1 = WaitIde();; K1 S) x0 ]+ P% M) w: F: x
   if ((al1&0x58)!=0x58) return ;, H: }$ {+ X# u2 ^$ m1 ~9 B& S5 W

2 J$ W4 e. q* k& c; z7 `   for (i=0;i<256;i++)
9 d9 V; [% i1 }# }6 P0 `$ J. e   {
1 W9 z2 n/ [5 X4 W& ^5 _' z       pw = inpw(baseAddress);: ?! [. G4 |2 @. K) e  {3 F5 D
   }
. D: R/ v* `/ t}
6 _; e+ c3 ^8 v7 |! n8 L" x
1 T  _+ s1 z" A1 L& V+ G8 ostatic void __declspec( naked ) NowInRing0()
1 H6 U' _8 y8 t6 ]{8 V; {8 V% Q6 Z/ L7 P. f
   _asm
1 D( ?% {/ k! J   {
1 D# w7 Q6 ]7 [, t# p       push ebp, [$ I% I* H5 N( L! w! ^) Y
       mov ebp,esp) J: b' C. B' @: K* s
" A. x1 R3 \; @/ F$ m0 T9 @5 D
       call ReadIDE8 x9 B# ?0 M  t
       cli
6 P( S" W" N5 u. v4 w7 A       mov ebx, int_idt. m$ H. o% N0 A
       mov ax, Entry% V: h! M) q$ j! E; o  B& y( L
       mov word ptr [ebx-4], ax
, {9 ]! Z- r* s% w' n       mov eax, Base
5 b% |5 `( Z3 k2 [4 J       shr eax, 16" M# A& O- ~% Z
       mov [ebx+2], ax/ c/ ]9 P% C8 j9 {$ d
       sti
4 R' C8 O  t7 V       leave
  S; C; z% _# V. O/ L! r5 C       iretd0 z; d2 n, A; `3 x* r0 l7 A
   }0 ^5 E, ?+ X& t9 o9 R" G7 ?0 K* C9 m
}  I. q& L4 `% h1 M/ j2 X; W
8 a6 b$ p4 H! R+ K
void GetIDEInfo()& x! Y- q- F" J, q* Z& h! N
{. C3 A- ^" N2 d" p0 O
   DWORD dwExcept;! J8 G. q- ^: i4 u# `5 Z6 |

- @1 J* Y2 j$ [; k" g$ J   dwExcept = (DWORD)NowInRing0;  y  X! _) Q( r& }$ [: V3 N
8 R  P. q4 X  o  Z$ H
   _asm, i! q/ A# H& b9 m
   {
. I7 m& \4 Y1 D9 |7 Y/ S/ [- {       mov eax, fs:[0]! X9 ]3 ~0 `' \
       push eax
+ ?% M6 c) x' V# ~* Y       sidt [esp-02h]+ e! w0 A; F: ^
       pop ebx
) f' \1 k$ u* `. F! i, [1 L, W       mov idt, ebx
# u# m: a  p8 q. h       add ebx, 0x1C
3 ^3 P5 M6 X; B2 u8 [5 [       mov int_idt, ebx
  Q* k) r5 O8 g2 P7 ^8 J( L
( Y/ I/ l# i# u- h# @8 n! f' T" G       mov eax, [ebx]6 Y6 y, q3 j; m5 G& `8 M  E
       mov [Base], eax
+ ^4 {' S/ f0 g9 o" B; P       mov ax, [ebx-4]  v9 N, j2 ~8 E
       mov [Entry], ax
3 c) ?4 B% \+ P. j- i8 d- k2 K" o" {/ F* y% `
       cli, D% p% R, @( _/ M5 u2 L* B
       mov esi, dwExcept
: s. v% a9 c. U4 S6 s2 W' X       push esi
& M' _7 ~" {. i( b7 c       mov [ebx-4], si
3 J$ h! e0 x  Y; z' J1 x       shr esi, 16. I, @. ?* z5 Y) f% F
       mov [ebx+2], si
8 y  p4 b  w( D; L5 y7 i       pop esi
5 [% V; H' j/ k  p6 U/ c% ?       sti2 Z. w: V; S* x, f9 K

1 m# _1 u* o- D4 L* D1 E$ L) N% Q5 Y       int 34 R- W+ U" K4 b  T; \+ N& p
   }9 v6 c) m! h5 ^8 G( u6 _
}% p1 `2 y8 ^8 {& U
int main()* I- c6 Q: l( x" O) d# K
{
" R7 s7 [5 m6 n   char s[80];
  O- M2 x8 l+ F1 @* J   register i,j;1 p$ M% L$ M" d- b; m/ x
   unsigned long id = 0 ;- }2 n* q- z7 g' V0 E

8 u! c: E1 p" ^; e# K: P//特别注意:这段程序不能 Debug7 X' s) }- q7 ^/ q9 l6 _6 P8 }
   for ( drive=0 ; drive<4 ; drive++ )$ k6 L+ \7 C: r( U! H1 c' O
   {
7 ]2 N* W: r2 G1 j; }  ^/ }" b       memset ( pw , 0 , 256*sizeof( WORD ) ) ;
. o4 t# ]" y) F* h% l& }6 h1 h       id = 0 ;
/ u% Q- G: [' a, d       al = 0 ;
! p/ p/ q+ B1 G8 ^& W       al1 = 0 ;% M7 S% c; O( H3 |1 r
       GetIDEInfo();3 {. z" L* H. ^$ u6 f$ Y9 W7 V

* t! n9 w9 Q; w0 v% |0 o) S4 b% `       for (i=0,j=0;i<10;i++)! M: W; t3 i1 x. ]* ]
       {
$ @; f8 }3 w, Z/ u; L; N: i           s[j++]=(char)(pw[10+i]>>8);
4 o% a& n7 g. d- N6 k( d           s[j++]=(char)(pw[10+i]&0xFF);# @' V' _7 W5 L; X
       }2 h6 f+ p; U; Z6 g, C0 I6 j; l& Q  u
       s[j] = 0;9 K2 I& `) d+ `. X3 e8 d' D

$ w5 G' Q/ `% U5 I# [//        for (i=0;s;i++)printf("%d,",s);printf("\n");
& ]: D) s: V& m( a7 k2 Y/ u8 g       printf("Serial=%s\n", s);3 e: `8 H+ c7 {; @

" p% e" ^$ h/ e8 |/ s$ \       for ( i=0 ; s ; i++ )2 p+ _, B  x. w# I  O0 e/ k1 i
       {/ B- H, ^! P/ P, o  m' c6 |* f7 Z9 H
           if ('-' == s || '/'==s || ' '==s) continue;
1 Y! b1 C7 c2 g, o+ o6 c/ U, y           printf ( "%d," , s ) ;
9 u) v* S) J5 E2 Y3 u6 g4 P           id *= 40 ;        //10 ;+ V, x9 [" n! ]3 C
           switch (s)$ F5 w3 Z; f9 T+ B9 V* U  r  z% Z
           {- z) o: _" X" n' q
               case '0': id += 0; break;
5 w  `( r3 l/ |2 l2 ^               case '1': id += 1; break;5 z) w8 @5 u& P1 {4 x& E
               case '2': id += 2; break;
+ V( i0 L; a( S6 C               case '3': id += 3; break;
, u5 E  q1 x% O! `( j& l+ C" d               case '4': id += 4; break;6 q# f1 J" S1 @) L2 z, d: X: \6 O
               case '5': id += 5; break;
0 j# |3 t9 X4 M( P               case '6': id += 6; break;
1 k# _  }3 m: A9 m3 G3 |# E7 @               case '7': id += 7; break;4 p) z5 k7 @  ?% m
               case '8': id += 8; break;
) F( K( A7 K) A, \: B1 N               case '9': id += 9; break;
* w& l7 r, f6 y" a# a6 ^               case 'a': case 'A': id += 10; break;, r+ E. U1 y% h) j
               case 'b': case 'B': id += 11; break;
. w# I6 r) Z# \, S- V) H               case 'c': case 'C': id += 12; break;, u8 P. ~8 `( M3 T  }- Q
               case 'd': case 'D': id += 13; break;
6 P( o7 i& I, r3 n1 a               case 'e': case 'E': id += 14; break;; i0 y6 }  D0 X7 x8 a
               case 'f': case 'F': id += 15; break;
, z" t3 M5 k5 l3 Z0 c: x               case 'g': case 'G': id += 16; break;
( Y* c' p) [3 a4 A7 S9 g               case 'h': case 'H': id += 17; break;. t; C6 N- H, y4 Z0 n+ s8 l
               case 'i': case 'I': id += 18; break;) H2 E. ?8 c4 x5 `" }# k1 D9 E
               case 'j': case 'J': id += 19; break;
6 L0 R& w& ?" {: N               case 'k': case 'K': id += 20; break;
0 a1 o/ g) }$ K+ d0 t               case 'l': case 'L': id += 21; break;
6 k9 V+ F; o1 m& w               case 'm': case 'M': id += 22; break;
0 q2 j; _+ {3 r6 \+ i               case 'n': case 'N': id += 23; break;4 I2 {* m0 V. S' ^: [0 V! S
               case 'o': case 'O': id += 24; break;' j# @) ^( i  A% o. s
               case 'p': case ';P': id += 25; break;
& u6 r) Z6 H, {8 P               case 'q': case 'Q': id += 26; break;
1 \% q6 v7 [/ l8 Y               case 'r': case 'R': id += 27; break;
0 [" O; U" H" c! W               case 's': case 'S': id += 28; break;
7 W2 [+ l( F, M# o. ^# T! y               case 't': case 'T': id += 29; break;
' M9 v  M. j0 ]  X               case 'u': case 'U': id += 30; break;  F8 o, `0 K! g, ?/ o" [
               case 'v': case 'V': id += 31; break;5 E& Q' U# k8 ~$ @; e8 v. b6 o
               case 'w': case 'W': id += 32; break;! A' {/ h: V) d" a
               case 'x': case 'X': id += 33; break;
4 m  V7 s5 Z- D( ?2 ~" D. H! J               case 'y': case 'Y': id += 34; break;$ m. W# k4 a$ H, P
               case 'z': case 'Z': id += 35; break;
# K. t+ F/ j3 y% n" c               default : id /= 40 ;5 e$ S. T3 |0 A& R- a
           }
$ `0 Z. Z  c; w  n5 |1 W  H9 u       }0 u. r% _* n( v; G: k
       if (id > 268435455) id %= 268435456;. L4 R. f  S9 o6 E5 T0 ?

0 s, n$ T9 U# Q- s' G1 k//        if ( al1 == 0x58 ). d# {8 q8 b" A; V
           printf ( "i=%d ID=%d al=%x,%x\n" , i , id , al , al1 ) ;! [- t. r4 }  `8 w( d
   }
9 w& m' @( z; s: r# y# A9 S  I# i   getch () ;; Z/ D4 E4 m$ P7 X8 o- S
   return 0;
# j( b/ c5 k0 U: X1 P6 o# C' d}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 08:45 , Processed in 0.017523 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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