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

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

  [复制链接]
发表于 2006-3-11 14:49:04 | 显示全部楼层 |阅读模式
WORD pw[256];8 p7 O3 [2 u* [$ Y9 o% E% \- X+ n

- d8 e  t' p% S6 [6 _) estatic DWORD idt, int_idt;
, [( s+ ]3 y8 z4 K7 P* F- jstatic DWORD Base;
0 w' Z5 Z- J3 Q' kstatic WORD Entry;& M- ^; C- z3 R) t7 ?8 ~& M
7 f3 `$ C' |) ]; `
#pragma warning (disable:4035) 2 |9 T. `& K# ]# J2 ?
static int inp(WORD rdx); Q* ]+ B$ q8 {7 m, p6 e$ N1 B5 O
{& n6 e; j) B& c
   _asm xor eax, eax
) e+ K9 L% ^* ^+ L4 T0 H+ p   _asm mov dx, rdx8 R! V' _' B- l7 r/ x& ^4 t
   _asm in al, dx' \5 l2 \0 W" X" m0 Z0 o. P
}9 t5 \: S% }+ D3 g) v0 ~! |
- W5 h" c" I* x
static WORD inpw(WORD rdx)
' q+ p( A; q1 ?6 t0 I- L2 f{
2 t" G9 I! n2 v& W//    WORD retData ;
1 n: U: {+ i% {5 {) A, v   _asm xor eax, eax
- K+ U9 h3 y  i+ J1 y$ `   _asm mov dx, rdx4 a5 A, p/ A4 @6 }) V# p
   _asm in ax, dx7 I7 V: @4 k: L8 l2 H8 \. D, \
//    _asm mov retData,ax( t# G5 Q, \9 z& [
//    return retData ;" y+ I2 B; i8 J* H5 _8 Q) c
}2 i4 ]* J7 B3 O- e* S2 G
9 R. K' ^& ~: u5 O* Y4 \
static void outp(WORD rdx, int ral)0 v) _6 n. g% a8 Y
{
1 g' t4 t( [0 ]$ M% ]   _asm mov dx, rdx
% A6 S( `; k% w+ G   _asm mov eax, ral
, T1 T- ?9 T5 I$ V* L) c   _asm out dx, al
9 u1 t: {$ y2 A9 _* r4 \}6 D  v4 M0 r6 D- g; }8 C
/****************************************************************************/
( @; x2 e5 l3 u* l4 {WORD baseAddress;
2 P/ M2 M* ~5 B2 F1 K3 g1 Bint drive = 0 ;
, T$ y: X7 [/ h3 c1 E& |3 |* E  R9 G, iint al ;9 X% ]4 M: g; B+ B* t$ N
int al1 ;) x' N7 D; a! h7 A' S" }
/****************************************************************************/6 `6 W6 `& A' K( M
static int WaitIde()
4 Q, a! g1 H( P- R{
4 }3 _/ |4 S) l! {   int al;  f, X. }7 M+ ~! r6 N) ^% {, x
   al =  0x80 ;; a) F$ D( U) r/ s, h" H

: M) P' w0 k1 E   while (  al & 0x80 ) al = inp ( (WORD)(baseAddress+7) ) ;
9 c4 ^8 ~& O6 q' F- _5 G- c; |
" e( E( w" d' U; g   return al;0 G) `) {8 m+ y* Q& \& Z7 e% R
}3 m( e, q' d+ ^) F4 c/ d+ T: b* Y
/****************************************************************************/4 ^% B! C$ V9 N* k1 q
static void ReadIDE()
. u0 X' {1 @2 ?{3 d4 u3 ]* `. Q, s% x
   int i;# S  _' K/ c) ?7 ?# r# L
   switch (drive / 2)& C5 H) W8 ^/ U1 P$ I$ }2 [
   {5 D1 [% ?5 V% S( `
       case 0: baseAddress = 0x1f0; break;
$ I9 M. n  i/ E  H' m' H" ^% _  s       case 1: baseAddress = 0x170; break;
  `9 Y# l7 b) ?, |       case 2: baseAddress = 0x1e8; break;* s5 c" ^4 z: z1 n) |
       case 3: baseAddress = 0x168; break;+ w2 A+ y( I! `! y" N
   }7 V1 u7 Z$ [1 V

8 E/ }/ L8 {0 L4 d; d   WaitIde();2 g; d$ X) s. ~4 m
   outp((WORD)(baseAddress+6),0xA0);) X1 ]1 B1 u0 a- U: D8 Q3 Y
   al = WaitIde();
. R% V2 d% R% Q; t5 {; C- E! y9 E% x5 B; w+ j
   if ( 0==(drive%2) && (al&0x50)!=0x50) return;
2 K+ z# \' y  Z3 W: i+ c' W   if ( 1==(drive%2) && (al&0x20)!=0x20) return;
% t- M% o7 X* }$ E% o8 K6 G" Q/ B* Y- G7 J6 F
   if ( 0==(drive%2) )
- q- L: M9 ~4 V/ Y# t9 C       outp((WORD)(baseAddress+6),0xA0);
- E  g0 i. s" Y1 Q   else; }  O8 j5 r5 B) v
       outp((WORD)(baseAddress+6),0xB0);$ S: G; R1 y# X9 U; q5 _8 s/ a! |

6 M4 W" K6 z% [% e$ i; j   outp((WORD)(baseAddress+7),0xEC);0 s: }- f) t$ l0 T7 C) P! b% M/ M1 I
   al1 = WaitIde();
" r9 r* r8 f. r1 u2 U% G& ^8 g; f   if ((al1&0x58)!=0x58) return ;
, q5 R! W8 N" ^, V5 A, ~; @0 z8 ?1 p; l# N5 Y, m
   for (i=0;i<256;i++)# M, V* H/ O0 i* m8 }( f
   {
3 c+ s) d) L. w% ~       pw = inpw(baseAddress);
- n" Y1 \* ~9 G   }& W+ k2 X  r5 Y1 Y" h- Q! L
}
4 l1 O0 S+ i% J$ L5 H, f7 a3 J2 D. Y1 I% R
static void __declspec( naked ) NowInRing0()* `+ j( x' K7 U: t, S
{" ?1 V7 r/ U( u5 f4 L7 _
   _asm1 ^0 ?( [6 d4 I0 \7 Z
   {
, \8 ]3 n$ M+ l- Z6 Z8 ?       push ebp
& N# z* N4 U" N0 o       mov ebp,esp1 n7 Z+ t) d! C
9 n+ S! s7 D  I+ t+ A9 a2 Z
       call ReadIDE
0 {1 U" o' W% z( v       cli* n- v1 }- h# R4 k( H  y/ Z
       mov ebx, int_idt: U: n' L, u) E% N3 D
       mov ax, Entry$ F& |% c+ c8 ^/ g2 h8 c2 T! x
       mov word ptr [ebx-4], ax
7 {' r. u" g8 x) y6 d4 `3 ^8 |       mov eax, Base
- o( i; ]" n7 z- I) Z& |+ \$ c! ^( M       shr eax, 16- J) b3 V- X3 J' E. W
       mov [ebx+2], ax
( P, D' z5 p* @. {! \8 F/ x5 l       sti# G) h; V* Z6 b) K! _
       leave, Y, J+ ^* U7 D( R- i  e5 I
       iretd; j8 G" B# k. H# H( v
   }8 a; y! Z0 K) x9 o& ^" x
}
: L. i$ L4 O9 f- j) m+ h" H# [% Q# K$ R, x- s
void GetIDEInfo()* N: J4 N# |2 }
{
* I7 l. v# Z' w6 g! h) e  {- S   DWORD dwExcept;
, e  j9 v" \6 Y+ \
8 f* Q/ C) l- y% H3 `- c   dwExcept = (DWORD)NowInRing0;
- B5 c! P/ s( z  y/ l" F+ X9 }  ^8 n
   _asm
( X8 Z* N: R/ \: \' F% f3 V( |   {# a! x: B* k" B8 _' f; ?8 g* M
       mov eax, fs:[0]% R1 m$ m3 ^3 S9 E
       push eax
' H5 B( E& i7 `( o4 v; \       sidt [esp-02h]
) Z, [- X; `% W4 }& L8 F5 d; ~, F       pop ebx
7 p; P- z& @1 T) R4 P       mov idt, ebx0 N7 {% y6 F) y- q  j$ O0 j
       add ebx, 0x1C/ n6 q7 i/ A* L4 z. x' G8 Z- f. C
       mov int_idt, ebx
' v, W9 |" @$ M( d
+ |, Q4 Z  u6 O9 u; Y       mov eax, [ebx]6 S" n5 }/ d. b$ g4 Q9 L
       mov [Base], eax, O, D/ ?+ p, x# v3 q( N- K, b; _2 M
       mov ax, [ebx-4]% x$ j/ a4 c9 b
       mov [Entry], ax& R4 N9 {1 K8 J) o& D" b' C; R
; C2 v2 z# s# E# ^, N
       cli% g2 P/ Z7 i9 S
       mov esi, dwExcept
* v& L- ^+ h8 @       push esi( G2 t% {& N1 o; p
       mov [ebx-4], si# D; V* @, f/ \3 R, a8 ]( N8 a
       shr esi, 16
* u  l7 E' }$ x; ?  K- s1 P       mov [ebx+2], si
. W/ q" n7 L% b8 V9 s1 n; f       pop esi
3 _/ s, z! z  V+ Q       sti9 `( k9 P/ H$ S! m

9 }' ~" s/ s( g" b& d' R2 d       int 3# O2 J* F( m* S. v* t5 ^  y2 L  l
   }
& t! b+ |& z9 q/ z- v9 S. k}
" b2 c+ c4 O) ]! ?int main(): f* h6 R5 z" z% V" i0 N
{& n; A' M9 Z. \* g% T0 r2 o1 Q
   char s[80];7 w" g  r# l3 p+ L
   register i,j;$ B3 v8 S+ k+ R% e; k
   unsigned long id = 0 ;
3 m0 J) l- p  |" ?3 q3 Y
, k9 ?1 f8 J/ b. Z( [+ h$ w//特别注意:这段程序不能 Debug- l+ ~( y6 r% k8 r
   for ( drive=0 ; drive<4 ; drive++ )
- E7 o! v- J' |- a% E- t   {
4 W1 k, g* ~8 ~$ k, G" U' P/ S8 b       memset ( pw , 0 , 256*sizeof( WORD ) ) ;
. {: _0 W& \$ l, y" `, S) B9 x4 {7 y       id = 0 ;; L* j1 b4 V& ~4 M1 `
       al = 0 ;. X4 Z8 |" M3 w4 t
       al1 = 0 ;
5 L8 G5 `/ V7 C! Y# ]       GetIDEInfo();
' @! N; x+ S. L4 \% Y+ j5 Y7 q1 e1 b
       for (i=0,j=0;i<10;i++)2 T+ f1 S) u9 z  e8 F1 y
       {% F  B# Y6 e: M5 {$ g& r9 p
           s[j++]=(char)(pw[10+i]>>8);
, Q1 k' l* ], b- M3 ^           s[j++]=(char)(pw[10+i]&0xFF);
  f9 O7 Q" u% S" F% g- Z) x8 V- d' @       }
6 H$ u/ a: b* L2 Y0 ^! d       s[j] = 0;
$ x' ]6 C' ?- N: N$ P
0 B# y( I1 l9 @: t* L" p7 S/ I9 a//        for (i=0;s;i++)printf("%d,",s);printf("\n");
0 C" C  ]( Z) j! ]  {! k0 P       printf("Serial=%s\n", s);6 Q  D" v) r4 j) a: g7 v/ p( d
. l2 d) q4 A+ W' U
       for ( i=0 ; s ; i++ )
! |0 d% E. Y" q. U# t5 P       {
4 u& |7 m5 k) Z5 q8 n! F1 X6 g  I! y( \           if ('-' == s || '/'==s || ' '==s) continue;+ J% J7 e) w# f. H7 ~4 a$ {1 F
           printf ( "%d," , s ) ;
6 R# c8 c" D! t- h           id *= 40 ;        //10 ;  @2 J( n* O6 V! x( x  g
           switch (s). m( i4 W% i3 x7 E6 c
           {
" h5 _9 f* X. T9 _- s               case '0': id += 0; break;' a8 H4 T: V  P" @+ J% j1 ?1 z
               case '1': id += 1; break;( \6 I9 |0 _, V2 r
               case '2': id += 2; break;
) r4 o9 f( B7 a               case '3': id += 3; break;
+ m9 L1 p* Q- p9 ^               case '4': id += 4; break;4 b/ j2 U4 P0 T+ S
               case '5': id += 5; break;
: T5 X  ?# z) U6 \3 O               case '6': id += 6; break;3 R: H% O( A1 Z
               case '7': id += 7; break;/ X3 @/ j% r" O, `+ V4 n( f
               case '8': id += 8; break;
- x  d2 l+ p* X* n' L               case '9': id += 9; break;0 P' w+ u* ^2 b" M* D2 v" s
               case 'a': case 'A': id += 10; break;
1 X% ~- Y+ F% C' g               case 'b': case 'B': id += 11; break;
% p# b! }9 k) r9 y! z! J               case 'c': case 'C': id += 12; break;
, G- N6 ]( C- h3 d               case 'd': case 'D': id += 13; break;
; j, u  V  c7 U. S2 M               case 'e': case 'E': id += 14; break;
/ G/ J/ m+ g! `8 q  W' g$ e5 ]! X' D               case 'f': case 'F': id += 15; break;1 K# |/ n* F( ~" z2 N# R5 }6 R
               case 'g': case 'G': id += 16; break;
% H# X- R4 `  Z3 U               case 'h': case 'H': id += 17; break;8 W4 a5 A( ~( U0 y! R. Z* m
               case 'i': case 'I': id += 18; break;
: N2 a& t; e: z( r               case 'j': case 'J': id += 19; break;
" e, ^1 w8 L  S               case 'k': case 'K': id += 20; break;9 h9 y) l5 v% r( M) s/ d3 }
               case 'l': case 'L': id += 21; break;5 J% X  P: b! ]5 @0 j6 `, l
               case 'm': case 'M': id += 22; break;
" y. X2 L* W. g5 W# S" L               case 'n': case 'N': id += 23; break;
1 s6 T; j1 c3 H6 k0 R) k0 ^4 E               case 'o': case 'O': id += 24; break;
+ S6 L# p1 \3 O1 X. v               case 'p': case ';P': id += 25; break;
  m  R% ^9 E- R' V1 E               case 'q': case 'Q': id += 26; break;
8 V+ {/ a0 M- z/ j( o% v0 ^               case 'r': case 'R': id += 27; break;+ W) W( F5 _9 Z1 i% `  E
               case 's': case 'S': id += 28; break;" ?- i- g. ], b. J9 I$ }2 i$ {
               case 't': case 'T': id += 29; break;
6 J- _2 z, w  C5 x! q               case 'u': case 'U': id += 30; break;
& ?: W( N; O  B- i1 G" V* P               case 'v': case 'V': id += 31; break;& e! l: B6 b- `
               case 'w': case 'W': id += 32; break;) `& T6 i; X$ n+ W
               case 'x': case 'X': id += 33; break;8 |' x+ c1 Q/ i6 m8 l
               case 'y': case 'Y': id += 34; break;& @6 P$ {, l: f1 E+ l# P1 c0 @& R
               case 'z': case 'Z': id += 35; break;! h: A: D' i2 q: P# v/ `: Y
               default : id /= 40 ;
6 t& R6 J2 k$ D8 c' a           }
) ~0 V  e) E8 G( E0 `% O       }/ Z1 N! r/ j+ l2 A! M' M
       if (id > 268435455) id %= 268435456;" h, l; }. a" K4 ?
. b& m5 m6 b; i
//        if ( al1 == 0x58 )
& f7 u3 f+ w" a* b# O; q           printf ( "i=%d ID=%d al=%x,%x\n" , i , id , al , al1 ) ;8 F! _( m7 K, n1 }3 l2 H0 c
   }! Z3 H$ g+ O* l$ e, S) {! |
   getch () ;
- S; q! L6 B) x6 t) t1 M: n# [. v   return 0;
3 T/ K4 t+ _$ `1 ]}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 10:23 , Processed in 0.018261 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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