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

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

  [复制链接]
发表于 2006-3-11 14:49:04 | 显示全部楼层 |阅读模式
WORD pw[256];
6 M! Z5 T  F$ S6 a& u7 C% J4 l; t) ?: t! D# c, v0 h3 K
static DWORD idt, int_idt;% ?' A. e$ w. M: q
static DWORD Base;! b1 ^5 b* ~% i$ @) {+ S
static WORD Entry;# ^2 ?( q$ k* N1 E

5 }( r" L7 _6 n#pragma warning (disable:4035) * a+ Z0 T) `* S! Z, Q
static int inp(WORD rdx)
* O- N" ^8 Y2 @3 ?1 s# s8 C( u{9 q6 A: A. G# M3 e) p" S
   _asm xor eax, eax
+ \; m* T6 |5 \   _asm mov dx, rdx
" p2 N0 u: J" i, Q* W: Z   _asm in al, dx
, _3 A, \6 \. t}( q7 d4 t7 G& g5 c5 [
+ K/ Z4 t7 ]' ~, w2 ]( t# e8 a" ^
static WORD inpw(WORD rdx)
: f$ `1 [1 g* ?+ U% a. G{3 Y; x: `' t6 _1 a3 s
//    WORD retData ;4 Y: R: Z/ ~6 j' n
   _asm xor eax, eax
% w" \* y7 A0 `0 w; O2 B3 r   _asm mov dx, rdx
, ?& P" q" O  G) c( o   _asm in ax, dx4 ^: r' Q. C+ e- X  b
//    _asm mov retData,ax- _! h9 c: A) i- }/ L4 Q
//    return retData ;4 c2 f$ S" r9 K( j( n, m3 @4 F8 O
}
. S: \- M! h* V% p: W& a3 }
( H( D9 M3 I4 `& V. N& Vstatic void outp(WORD rdx, int ral)
% d$ Z8 d1 {4 m+ w{
4 j" l2 z& p! \0 o* T* O: |   _asm mov dx, rdx$ j% ~8 Y; r1 X3 U6 X4 M* N8 O# [" h
   _asm mov eax, ral
% [' @3 H  B, V/ Y. {. z   _asm out dx, al; H" a7 d9 Z/ q' R# }; Q8 R
}( d: w( P* d' @5 J  P1 `2 \; N& |
/****************************************************************************/
2 T" o% y$ C) q8 @WORD baseAddress;
- h( R( A9 ~9 R7 Vint drive = 0 ;' [4 O1 F8 D5 \& H; ?' y0 G
int al ;
) J0 \4 K* [. F1 n: B& Zint al1 ;- W8 d3 U( ~+ H2 |% b; D* U7 V
/****************************************************************************/
  m/ l. b$ b6 Astatic int WaitIde()
7 n) z" p- r1 v) l' L# f: n3 Z{3 B) f0 T8 R" Z* K- d
   int al;$ \* g2 p1 l3 l
   al =  0x80 ;
8 V: `2 I$ i, f
! H" i  U( }7 N# A   while (  al & 0x80 ) al = inp ( (WORD)(baseAddress+7) ) ;+ T$ m" T9 s  h* ]* n6 l

% I5 j3 ?' |# X* ^+ n' `$ S3 L   return al;
/ R: C$ A8 g4 U}
  g" c$ I0 a7 i# Z& J8 e8 I/****************************************************************************/
- m% ^% J/ l) z: ?static void ReadIDE()
, N/ Q4 n+ Y* I* ^; y{! I; B9 z0 d4 h7 d( b0 u9 m
   int i;6 [: J" W. @, ^8 {" K4 C3 X
   switch (drive / 2)5 I3 K1 ?2 D6 Q2 r, g4 _4 n1 u# b% p
   {* E1 G: }4 s, q  Q
       case 0: baseAddress = 0x1f0; break;
& W7 ]9 ?3 X8 t, ~0 _0 V       case 1: baseAddress = 0x170; break;
( T' s0 E% I) y+ c, M       case 2: baseAddress = 0x1e8; break;1 M% B6 e2 x8 N" v* q/ ^7 w3 Q
       case 3: baseAddress = 0x168; break;
, i& F8 L7 H7 H   }' r: ~( k& H/ E/ V3 ~! n; \' \! e

! ~$ u; g3 t8 Z* }- g" w8 G   WaitIde();( i' u) E" P, f; x9 |
   outp((WORD)(baseAddress+6),0xA0);  n- s! v( i7 M; V
   al = WaitIde();- B3 [( n  {" r6 `. w# H% s5 G

- l" n3 S' H* S. S6 b  M   if ( 0==(drive%2) && (al&0x50)!=0x50) return;6 q) {3 E6 a4 n5 V$ {$ j& O
   if ( 1==(drive%2) && (al&0x20)!=0x20) return;" E" A' D- [+ ^$ R1 q
% c& c# E: i2 h. ~0 H
   if ( 0==(drive%2) )
. d9 ~0 A1 c* j       outp((WORD)(baseAddress+6),0xA0);1 \+ o: g7 T. @. }
   else6 s# k% E* T( U
       outp((WORD)(baseAddress+6),0xB0);4 j/ ?2 ?; E# H' z+ Z, [

+ J" U- a) U. l  u, J; M- O( H   outp((WORD)(baseAddress+7),0xEC);
" B5 |2 R3 s* b   al1 = WaitIde();
( S, s2 S* L( o0 K# [   if ((al1&0x58)!=0x58) return ;; y# v% Y9 j! Z" k  o% V% w6 i
4 b# P4 Y3 W4 i
   for (i=0;i<256;i++)
1 M5 U0 e+ a5 b   {
1 a  [+ Z- N, L1 ?. ^       pw = inpw(baseAddress);
: P  b# D5 {  Q9 o# q' Z   }* o# f/ s# K3 f7 P" k2 t- n, j$ g
}& S/ V5 z, u# q
" H0 C% m& Y- y  _0 D2 R, C- U
static void __declspec( naked ) NowInRing0()8 J, ?6 f6 @! Y' w& R$ U( V
{
, }) w) H4 f/ {  f" X4 \3 D   _asm! o( h: n7 C; D: g! D5 F/ H8 l/ _
   {
& r) X  ~1 E8 @; s       push ebp) m: N% Z, D% A2 {+ Q$ V
       mov ebp,esp9 F. c; [' L) i- e6 n" K

  c3 i, N: L5 [  L       call ReadIDE$ q: j" g5 O. M9 V& e
       cli
6 j4 n: ~. r) h) z       mov ebx, int_idt
$ [. k% I) r3 O* E+ Z       mov ax, Entry% P  v: ?# ~. F. |1 F2 A
       mov word ptr [ebx-4], ax
6 J# K$ i! M8 R( v$ Y       mov eax, Base0 r3 u$ Z; \! _& F) B* i
       shr eax, 16) y- l/ r& h* L# E! [5 X
       mov [ebx+2], ax
7 B: ^5 f- v2 ?$ _# I       sti
2 r% _9 Y4 [. a0 U2 m       leave7 E; [5 c' i4 x1 G
       iretd
8 b" T) v8 H2 `" u! w+ n   }0 b! k& h9 }; u/ j7 I4 M
}) t  F2 r* q; S  t- E! }! P
" B$ ]) p  r/ B" i: G
void GetIDEInfo()
3 W7 X2 b+ X8 N# h) z( F9 t) b{8 i) p& j7 ~6 e/ y; G" y7 G
   DWORD dwExcept;, Z! I# X" w: }. W+ @+ n( M

: J; I2 X5 X; ^; c; l, L   dwExcept = (DWORD)NowInRing0;
  y* \/ R0 f. d" B) Y: n9 `. {. G8 N# `4 J. z& @% z
   _asm. d$ q, r4 C! n5 R6 z2 m4 C
   {# H- p5 Y2 `% q6 N
       mov eax, fs:[0]
" ~  @2 C2 J5 w  j* L       push eax" _, c/ c+ \! y( b7 w! e- E" e
       sidt [esp-02h]/ m3 |  Q! h" ]2 [; g
       pop ebx* d& f* W- b( P2 V
       mov idt, ebx
* I+ ]; f: I$ l; ?9 ?       add ebx, 0x1C
0 F2 c: f  f% y! U- [7 A7 o       mov int_idt, ebx
5 X; s4 h: E3 k, M# E+ ?
9 m9 L8 i1 f, ^" ^5 h& L" S: Q       mov eax, [ebx]9 f  a8 P1 b3 V
       mov [Base], eax
0 D7 P" n* f7 `( \       mov ax, [ebx-4]  L( P  t4 D# s% _  A/ ?; d
       mov [Entry], ax
) N# q# K$ K- Y, I) k) P6 ~" j- q' r( O4 A, {7 F; m
       cli
  |4 S, o; r6 @+ v" ~4 e       mov esi, dwExcept+ p7 ?, z+ N0 s9 Z" [+ s
       push esi
% f" u9 Q/ X! w1 H- z       mov [ebx-4], si
6 u1 n3 I! R" `& y1 ?! U  u- G       shr esi, 16
+ u! Q8 R9 y" k9 q  e; c  J       mov [ebx+2], si
( f/ J9 a% z. l2 e7 V+ s" ]( v       pop esi
- m; n& O5 `* X( X       sti1 a7 N  O+ {2 G& b* N4 {
5 ~; ^! V' U' h9 ?* E. G2 B1 ^
       int 3* x1 K2 i, Y' s3 {4 q0 V
   }9 @+ _4 d5 s6 E; E; o
}- l. M5 A7 m( {' l7 j, T6 K, \
int main()
* P0 d, `# `! d5 ~{8 ~, S, L; r! M/ L8 P% t5 L
   char s[80];
: _( W; ?2 g) ^" E' c5 V6 u8 s- U   register i,j;& A7 [/ o5 m2 b! p- o
   unsigned long id = 0 ;/ U2 X4 X) P! V6 W2 o

" g& U' k7 }9 V2 _% @$ b" G* q- Q//特别注意:这段程序不能 Debug, ]& t" i) a& M! L, R3 _
   for ( drive=0 ; drive<4 ; drive++ )% u' L: {! P3 g" A$ X
   {
4 h% b4 q5 E( X+ x       memset ( pw , 0 , 256*sizeof( WORD ) ) ;4 j- L1 z' U  P! _8 n- a5 X
       id = 0 ;- a& V) I2 ]7 Y5 }2 K
       al = 0 ;% s, ]% }1 E, f( z
       al1 = 0 ;- ~/ c0 J! L* T9 `: M+ o; l
       GetIDEInfo();
% ^; Q' w8 H- O7 ^
8 w, c1 b1 h4 r3 |# Q5 c7 l4 S' `       for (i=0,j=0;i<10;i++)/ M3 ]% l$ N. u/ @9 S" I3 J
       {
2 J  p9 f/ t0 l0 {; V4 S           s[j++]=(char)(pw[10+i]>>8);' j9 q  s6 Q) ?. \! P0 ]/ ]
           s[j++]=(char)(pw[10+i]&0xFF);0 r' T- B7 k8 v! ?! \
       }: |1 V! L% _# ?! j( Q' ~
       s[j] = 0;: d& c0 F6 J6 I8 R( ~
5 E9 Q* P) {- n, K& k/ o2 w
//        for (i=0;s;i++)printf("%d,",s);printf("\n");
* I+ v/ ?: h# k2 z$ r% n% n  ~       printf("Serial=%s\n", s);
& w( Q: F8 g4 O5 H3 V. c, |: T1 |# V2 Y
       for ( i=0 ; s ; i++ )6 q9 I; Z" }$ r% B
       {
5 L! g8 p8 G% C& k! i) |) ?+ E: n           if ('-' == s || '/'==s || ' '==s) continue;
, v6 [( ]2 u, Z           printf ( "%d," , s ) ;
4 K; o" {' J! p8 z           id *= 40 ;        //10 ;* ~5 Q& Z  g9 c& F4 x$ r. p
           switch (s)
4 x5 s/ T: v; _. h( n+ d           {4 e- M) o0 W3 e6 T6 E7 L
               case '0': id += 0; break;
7 R' d! W" g0 I, `( d5 I" `( o9 y               case '1': id += 1; break;
' j% q: t& h6 {$ G5 k               case '2': id += 2; break;
) `0 Y; V1 W( y3 v9 q               case '3': id += 3; break;
% ?2 o* u/ u1 }( t               case '4': id += 4; break;
0 M( Q$ S! S: \, `( `% I) |               case '5': id += 5; break;
9 l0 B& p# o2 `; `" L7 d               case '6': id += 6; break;8 e: n0 p' h6 I* d
               case '7': id += 7; break;
( H- X. X  F. F" H               case '8': id += 8; break;0 E$ T7 V; {: A4 g1 i' g2 r
               case '9': id += 9; break;2 D# l5 [1 n* c" ]: n7 U( P! J
               case 'a': case 'A': id += 10; break;( E# m- X5 X1 t; {) R5 Q- n* L8 x
               case 'b': case 'B': id += 11; break;7 Z, Q- Y1 s1 y( e1 ]
               case 'c': case 'C': id += 12; break;5 N1 m1 V) n! Z1 M. D: M( q
               case 'd': case 'D': id += 13; break;
) f: R) c$ |8 e0 J4 Y4 a5 C" o( x2 A               case 'e': case 'E': id += 14; break;
% d: L& V+ C5 g# z               case 'f': case 'F': id += 15; break;; I( S8 {, {" L
               case 'g': case 'G': id += 16; break;
/ J+ U4 M/ S$ P# z- @9 F               case 'h': case 'H': id += 17; break;: q. M+ K* C/ p. d: G/ p% Q% ~- I$ K. R
               case 'i': case 'I': id += 18; break;
2 H: F3 ^+ l* n5 S! ~9 V               case 'j': case 'J': id += 19; break;, h6 p9 S9 S9 j4 A' D5 M
               case 'k': case 'K': id += 20; break;6 K' j( J! F2 \& g& n
               case 'l': case 'L': id += 21; break;& N! Y# a3 L( a# k$ H  @& _
               case 'm': case 'M': id += 22; break;1 u+ F8 I/ n9 d1 d5 G6 O1 ]. w
               case 'n': case 'N': id += 23; break;
+ M  O7 }5 Q. Q  R               case 'o': case 'O': id += 24; break;. {* V# ^/ k0 r: c/ }# o1 q; @
               case 'p': case ';P': id += 25; break;
$ D/ ]: e4 _' c# m) ]               case 'q': case 'Q': id += 26; break;
* v0 S1 o! p. Q+ Q' `               case 'r': case 'R': id += 27; break;1 L8 \0 _! |' Z- a- u3 M
               case 's': case 'S': id += 28; break;5 I0 P8 Y7 U4 v  X3 t  ~+ j
               case 't': case 'T': id += 29; break;& Y9 e. R) q- P8 B+ k' T, C
               case 'u': case 'U': id += 30; break;
% z+ J# q8 f3 ]$ U2 h2 \) f               case 'v': case 'V': id += 31; break;  J" }* g/ T( j( f- j5 n& `
               case 'w': case 'W': id += 32; break;6 G7 T% Y+ Q* S
               case 'x': case 'X': id += 33; break;
* T/ a. ~% v. b               case 'y': case 'Y': id += 34; break;
& B/ l6 Y% D- w  D/ M$ B, i               case 'z': case 'Z': id += 35; break;
* s; G1 e/ B; d( W6 o9 |               default : id /= 40 ;
0 a. m2 W& R. x           }
" _5 b, \+ S$ B5 j1 o- Y3 ]       }: y- s% |/ h. w, y, x
       if (id > 268435455) id %= 268435456;0 n- Q5 l9 M% t

6 `# U8 P# }$ v& P. Z+ n4 Z//        if ( al1 == 0x58 )
# t, G7 W1 {! t* R2 c" U& _+ C) A7 W           printf ( "i=%d ID=%d al=%x,%x\n" , i , id , al , al1 ) ;
8 l7 L& W" z/ Z' X  b( p- b   }0 g8 _9 i7 W& O" \/ W# F6 v
   getch () ;
: L* g7 C/ V) E+ X1 r   return 0;
" W0 v7 B5 A) g) M- @: |% |}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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