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

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

  [复制链接]
发表于 2006-3-11 14:49:04 | 显示全部楼层 |阅读模式
WORD pw[256];' r% m+ h- T6 m5 _
  I. u) W2 g! \7 t
static DWORD idt, int_idt;
0 T7 X4 L% w5 S/ p* i7 M$ }static DWORD Base;+ v/ {5 {  j" o) C, Z  S* Y
static WORD Entry;
1 f( `/ X8 G3 G) K
4 B2 C: e. O' A# T: O8 c$ V#pragma warning (disable:4035)
9 e! j9 r6 [2 w8 mstatic int inp(WORD rdx)
4 V: Z2 _1 Y& b5 q{
$ b) M" `+ z9 @6 L5 a( B2 ^' I   _asm xor eax, eax& b! O2 U4 v6 _  P7 `1 K
   _asm mov dx, rdx( j* h; L4 `4 [# M6 O0 q* e) a/ O
   _asm in al, dx
3 s- D* b- F% r3 f4 o) t}
7 z* R: E" e% `) R- e" j
  B* L3 y4 g! q1 f6 Ystatic WORD inpw(WORD rdx)
7 t' S! B- r" J7 r{/ U% |0 ^" ?7 G+ s1 F: v) N
//    WORD retData ;' ~: F/ ?- U/ M5 C5 b# ~$ C
   _asm xor eax, eax/ {1 d, G: t' o) K1 N. [
   _asm mov dx, rdx
+ `% z  x- x, B* H4 ^   _asm in ax, dx1 |  {  z8 U, z; k' `4 _9 x
//    _asm mov retData,ax) h9 z' W+ ^  W
//    return retData ;
! R6 P& U) r+ m4 R7 g0 Q+ L" I}, j: z- T2 R: J7 t

  I- {1 P9 g& y# Tstatic void outp(WORD rdx, int ral)
9 K- b6 t1 r' h: r4 Z% H) M{) Z1 [$ F& A$ f, N3 C" }; U  @
   _asm mov dx, rdx" G- h1 z7 Y% [/ n
   _asm mov eax, ral
( R  Y+ r% T/ h   _asm out dx, al' ~/ [8 d5 W9 E" Z$ Z! \4 n8 o
}4 ~5 o' ~& u' e2 T' h
/****************************************************************************/% G3 j  C  E6 ^) X$ b
WORD baseAddress;$ H& \/ t  S$ ]
int drive = 0 ;
& r' m2 R, H9 y5 ]% u% y# n. `int al ;! I! Y" x" h* a( F, ^
int al1 ;; Q5 d7 [7 }4 Y  L( R
/****************************************************************************/5 _8 S' \5 V; J1 ~  E" p
static int WaitIde()- Q$ x2 v1 M% z" D0 L" y! A3 l7 U/ i
{- W0 C3 H. B& K: c# b
   int al;
3 L, ]: U, e4 }+ e   al =  0x80 ;
/ j- P3 S  r6 m" r4 w+ q
5 }4 J& a. l2 {1 f   while (  al & 0x80 ) al = inp ( (WORD)(baseAddress+7) ) ;
" O3 S7 v# d! z- d# b  n+ L* \/ A. M' V! S# ]% M6 N; F: w
   return al;2 f$ i8 P  H6 l+ p$ z
}% c* H( S: k8 }& M) U% I
/****************************************************************************/4 b% B- M8 }. C5 h, t
static void ReadIDE()
' s, N% w* f) e$ g{, D' P3 |! a7 y& ]. P3 f- X
   int i;
, M8 ^. e, m2 \5 J7 N! v( E$ S( l   switch (drive / 2)5 [9 y& B, _* f
   {; g3 k( ?( f- }8 }. K% @. K
       case 0: baseAddress = 0x1f0; break;
1 Q3 T2 g; y% c       case 1: baseAddress = 0x170; break;
9 S: t# ^" q! q( s) y9 R8 V       case 2: baseAddress = 0x1e8; break;$ g1 w4 {8 e2 ], \
       case 3: baseAddress = 0x168; break;% B3 L6 M0 W3 I% {& B& ]) k1 E
   }3 O  Z# R' C9 y

+ u6 \% f4 T  X7 ^   WaitIde();
8 x& k  j" |. x2 y5 W   outp((WORD)(baseAddress+6),0xA0);: p( l! J- z9 O8 T% ?. n" m( H
   al = WaitIde();
8 U, g& U# ^( Z; }1 d0 S- d7 P
   if ( 0==(drive%2) && (al&0x50)!=0x50) return;
( Q/ p9 p* e* X' Z- ]6 q5 A   if ( 1==(drive%2) && (al&0x20)!=0x20) return;
) [5 w% m, b  \. g
6 t1 z" A  {! L7 K   if ( 0==(drive%2) )
' q% A6 v5 L4 S$ o       outp((WORD)(baseAddress+6),0xA0);
% [# q5 g* s0 C( |, q6 c   else
' v. Z; ?5 W4 Q! {3 `       outp((WORD)(baseAddress+6),0xB0);
7 E* Y: b3 r& D3 D1 o- I) T; o7 a6 |. q+ u7 o- Y
   outp((WORD)(baseAddress+7),0xEC);
; y% E8 L6 {6 a   al1 = WaitIde();
9 P2 H3 ]; ]+ m7 \1 Z/ }   if ((al1&0x58)!=0x58) return ;
- l; E& P( x( W1 s
/ P5 Y% P) d& x- l   for (i=0;i<256;i++)
. U: s9 T& j) X" `3 D, V9 r   {: V, x0 Q! w5 ^0 c! l
       pw = inpw(baseAddress);, L$ @7 F, O! Q5 C/ q
   }2 a1 z6 Q2 j$ q9 B+ G
}
7 m" y/ j$ u. |1 N, @4 i
5 f, a# j$ k! k/ K9 xstatic void __declspec( naked ) NowInRing0()
) t/ O" a$ `3 Z" }8 {: S. l{# t& P0 b2 o! p3 s1 z8 N- O
   _asm$ [1 u* k( a* S# q  m$ ^  q
   {6 u8 {: E) F0 U4 _* ]" I0 v. A
       push ebp
& ?; {$ B" u' [! d       mov ebp,esp3 ^+ t& `8 }. j" ]6 O& `' _" L6 C

% j& P/ h  _' q3 Z       call ReadIDE
6 S9 W8 R+ `8 F$ k       cli
2 u3 [2 [7 X' X5 c  G9 t       mov ebx, int_idt
( m7 y6 w# I4 Y       mov ax, Entry
5 U) ], H! d1 p* f* e# \       mov word ptr [ebx-4], ax
  }- \) P2 `- v# s       mov eax, Base3 @( w1 c, s1 E% h
       shr eax, 16
- B6 R  e4 |* K3 h! k) {       mov [ebx+2], ax4 z  V+ }& a( v! A, J
       sti
, u4 o8 I) ?+ p9 B       leave
1 a1 |) N' f! ?8 @       iretd
+ Y4 b: C8 Q  L  e+ T   }' n- b2 d) W4 x; Z: C3 j
}
2 }% ]! F$ Q0 N' U
: y2 F' A2 k; @void GetIDEInfo()% F- j! T  ?2 S, @, [
{
/ y5 U3 O7 w1 I) Q+ l. K   DWORD dwExcept;
" k: I4 F: C' U8 J7 ]. t1 H# m# K6 \. x& |- m' ^( Q7 F
   dwExcept = (DWORD)NowInRing0;
& ?8 [6 P( p6 a( B2 D3 _! R6 y
$ d' A* _) F1 s4 W: e. _' i7 J9 e   _asm! I8 y( C1 |2 f/ w8 E. e. M3 \5 `, g* \5 [
   {' h& B  F3 t2 e4 R6 S6 L" u, ?
       mov eax, fs:[0], T0 a# ]0 J. x+ O
       push eax
0 s; \  d* _0 H% {) d       sidt [esp-02h]! c3 `* ?& u7 O; I. @
       pop ebx% \5 M/ j: m* |5 X8 y+ R; l
       mov idt, ebx
1 M% O* p! b# s+ ^; @       add ebx, 0x1C2 H; b1 B; `( Z9 ^7 _, T
       mov int_idt, ebx
4 X6 D% V9 _8 V$ i4 v
: f& `' |" B8 U% ?2 ^" r       mov eax, [ebx]
0 A. ]; ~. |' _7 A# l1 v! T7 Y5 x       mov [Base], eax
) ^2 _+ H7 l7 E7 v  E; M# M       mov ax, [ebx-4]
9 g- x3 E$ g& |" @* N       mov [Entry], ax
5 v& V  x, o* g& g8 E
1 l! P2 P4 i0 @( h% G       cli$ i9 j$ I- _  ?. D0 e) a+ r
       mov esi, dwExcept4 D$ h) Q8 ]! A6 }8 [; P
       push esi: F  E4 X% O& ~: `8 t& _7 y$ z
       mov [ebx-4], si
5 y! l. D3 u( M3 J+ g2 x( H' r       shr esi, 16) c6 K6 N: T3 ]! f9 G
       mov [ebx+2], si+ I+ t2 x8 {. P% p: r
       pop esi
' s* D( l7 B! |( [+ _1 z: {       sti
  X; _4 U' Q5 t1 L( }1 ?" }, s8 r! z+ `" {9 F- P+ J4 \1 d
       int 3
: P- }8 d* _$ V* {- R# l" \   }' V- T4 y' n! R! e, {/ B1 C  G
}
, z- t+ ]2 U$ g% u; eint main()0 v9 c+ I* q( e7 p, f( b! `7 H
{9 ]" V! j; M, Q8 F* E) G
   char s[80];
! x# x! K6 @4 m. x5 {   register i,j;0 ?6 G: _$ Q2 W- |
   unsigned long id = 0 ;
& j2 D2 a! S$ x% ~# Q3 {. L
" D7 P- I2 u  H, P8 u//特别注意:这段程序不能 Debug  `) R& c7 y# `* m
   for ( drive=0 ; drive<4 ; drive++ ); p( T3 x# c0 v) k9 J
   {
  n* {! P4 L8 Q# v/ ^       memset ( pw , 0 , 256*sizeof( WORD ) ) ;
) L9 U/ y1 |8 x2 z$ |       id = 0 ;( a& b/ H: R9 X+ O
       al = 0 ;4 ?/ w  y( ]" _. s+ h
       al1 = 0 ;
8 S' q/ }' g4 w* a       GetIDEInfo();9 B1 p6 Q. X) i6 K! ^$ l
7 ^; U. R, j# y6 q6 g, a) x5 P
       for (i=0,j=0;i<10;i++)
9 I0 w/ e& \' M       {
: h' z" S# q2 k4 e7 w1 M9 c0 ?           s[j++]=(char)(pw[10+i]>>8);
' W. Y0 t' e2 I8 ?, r4 O: _0 F9 f$ P           s[j++]=(char)(pw[10+i]&0xFF);
$ i/ _/ ~$ w9 E9 U! k& K       }5 N# X9 t$ l( l, _" m3 t9 T5 T
       s[j] = 0;! i5 r( |" r2 d0 p  c
- H' f+ E: ~  C
//        for (i=0;s;i++)printf("%d,",s);printf("\n");
; m. [6 C' F! ]8 y! ^+ ~0 {3 Y0 F       printf("Serial=%s\n", s);
+ g5 K% i# A! g+ i. F
* S; F+ ]& s2 K  Q       for ( i=0 ; s ; i++ )
4 i4 m) l% V& N* F5 W- P       {
, o& B6 r, y2 \; {/ R           if ('-' == s || '/'==s || ' '==s) continue;. J0 t; |: h2 }3 U. h' u2 R0 S3 P
           printf ( "%d," , s ) ;
- P6 }: U5 o, O, `           id *= 40 ;        //10 ;
5 \& S, E6 |% S6 S4 r           switch (s)" }3 s  x8 y! O8 E8 ~, z' s3 N. b
           {
" D$ k2 h% V) D" s3 T1 \/ R               case '0': id += 0; break;
# ?1 t$ {- p4 Y8 g* P( \$ Z, Z               case '1': id += 1; break;8 K0 y; Q' K5 i, t
               case '2': id += 2; break;
* Y7 ?/ L! r- E. S1 ?7 P5 H               case '3': id += 3; break;
9 P, X% J: |& p2 y" s               case '4': id += 4; break;
0 f: y8 W1 K# v6 M               case '5': id += 5; break;) O+ a: A0 P8 x" L# k& X% b
               case '6': id += 6; break;' z: Y2 t' U( v7 Q% I7 N
               case '7': id += 7; break;4 B+ l1 D+ B. x/ T
               case '8': id += 8; break;
) {9 b1 I3 L% v/ r% P/ V( o               case '9': id += 9; break;
# ?3 E. |8 w4 v0 \5 [               case 'a': case 'A': id += 10; break;
9 f7 K/ V! V4 e4 y5 f               case 'b': case 'B': id += 11; break;
% a; s9 N% E; J. B4 f( {  Z1 {               case 'c': case 'C': id += 12; break;, n8 Z9 ]& C/ g' t9 v( }
               case 'd': case 'D': id += 13; break;, c+ s! s0 z6 K; M) C- \
               case 'e': case 'E': id += 14; break;
( U* n) @  c, @9 o               case 'f': case 'F': id += 15; break;9 C" i4 j. I2 M6 t
               case 'g': case 'G': id += 16; break;
2 o9 O! A/ A  C0 e! v' }& I' b; \               case 'h': case 'H': id += 17; break;
; c- L; ?% l8 q+ {0 o  v& x: j               case 'i': case 'I': id += 18; break;& [, k+ b' G9 w
               case 'j': case 'J': id += 19; break;
. b2 l2 x% A, \6 k& p, p               case 'k': case 'K': id += 20; break;
& K. N" F0 u. Z' d+ d  I5 d               case 'l': case 'L': id += 21; break;
  e6 S; S( `! E6 i- `2 u               case 'm': case 'M': id += 22; break;
# d5 }2 V4 M/ t3 I" M1 ^: V               case 'n': case 'N': id += 23; break;5 S* |& b5 v+ c. }( F3 W: U
               case 'o': case 'O': id += 24; break;9 V5 q1 v2 y# p$ |* |6 r
               case 'p': case ';P': id += 25; break;/ n) N& i; W7 b$ ?6 ]4 ^% g" U
               case 'q': case 'Q': id += 26; break;9 J- Q  I- o0 b4 r% O
               case 'r': case 'R': id += 27; break;, q6 i- F: l4 n
               case 's': case 'S': id += 28; break;
) [) N& `$ [9 `3 j% B1 l7 W               case 't': case 'T': id += 29; break;. [+ @5 G4 S2 s8 u) s
               case 'u': case 'U': id += 30; break;* f" v& {3 I( g% e8 e& q
               case 'v': case 'V': id += 31; break;
! Z! N4 d; s9 l$ ~$ x               case 'w': case 'W': id += 32; break;7 v( p8 M% [6 q8 ?5 m3 o6 Q* E3 H0 w
               case 'x': case 'X': id += 33; break;( ~  w' Q" f2 H  @1 L
               case 'y': case 'Y': id += 34; break;
. L$ m+ C7 W" J& |- `& s0 c/ O               case 'z': case 'Z': id += 35; break;% J0 I6 L2 b2 |0 A5 R; {
               default : id /= 40 ;
3 A8 _" v  m- Z! _           }
% k0 _$ C% f  M       }
- A' i& H) A( _% b! M       if (id > 268435455) id %= 268435456;
2 t' ^! ]5 T. v7 q
5 c) F' r) k. t! R: z2 L3 i$ x//        if ( al1 == 0x58 )
4 _0 L, G: x/ |; a% f/ {5 y           printf ( "i=%d ID=%d al=%x,%x\n" , i , id , al , al1 ) ;
4 P  j4 b2 k6 I' P   }
7 j! X; R9 ?! p+ T  s8 E: ?   getch () ;/ M8 G* w3 r7 {6 U, T2 Y) a8 n
   return 0;
9 ^4 E0 `" L+ }}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-15 01:41 , Processed in 0.019892 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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