泌採園亟C囂冱殻會聞犯尼強(Ctrl+Alt+Delete)払丼
辛參。勝砿音否叟讐賠萱泌採聞犯尼強払丼?徽凪園殻糞孖抜旺掲佃並。葎阻俺資Ctrl+Alt+Delete似囚會双?低駅倬旋喘囚徒議嶄僅捲暦殻會(interrupt service routine?抹亟葎ISR)。貫匯倖互議蚊肝貧讐?囚徒ISR頁宸劔垢恬議?酌篇(俺資)侭嗤議囚徒補秘?吉棋Ctrl+Alt+Delete似囚會双。泌惚俺資欺議音頁Ctrl+Alt+Delete似囚會双?祥委万勧公“柴麻字”?泌惚俺資欺Ctrl+Alt+Del似囚會双?祥委万懲渠(貫囚徒議忖憲産喝曝嶄評渠)?賜宀委万廬算葎凪万似囚(低議殻會岑祇宸倖似囚燕幣喘薩?勣犯尼強柴麻字)。壓殻會潤崩扮?唯峭酌篇囚徒補秘旺志鹸屎械議荷恬。宸祥頁ISR議垢恬圭塀匯 ?万断委徭失銭俊欺囚徒才凪万嶄僅貧?宸劔万断祥嬬岑祇壓焚担扮昨竃中肇頼撹徭失議販暦。
椎担低哘乎泌採頼撹宸乂垢恬椿?輝隼?勣喘匯倖C殻會。和中頁匯倖酒晒阻議箭徨?万酌篇侭嗤議ctrl+Alt+Del似囚會双?壓乎怏栽囚梓和扮音恬販採郡哘?
# include <stdlib. h>
# include <dos. h>
/ * function prototypes * /
void ( interrupt far_cdecl KbIntProc)(
unsigned short es,unsigned short ds, unsigned short di,
unsigned short si,unsigned short bp, unsigned short sp,
unsigned short bx,unsigned short dx, unsigned short cx,
unsigned short ax,unsigned short ip, unsigned short cs,
unsigned short flags);
void( interrupt far cdecl * OldKbIntProc) (void);
unsigned char far * kbFlags; / * pointer to keyboard flags * /
int key char, junk; * miscellaneous variables * /
/ * keyboard scancode valuss * /
# define AI.T 0x8
# define CTRL 0x4
# define KEY MASK 0x0F
# define DELETE 0x53
void
main(int argc,char ** argv)
{
int i,idx ;
/ * Save old interrupt vectors * /
OldKbIntProc= dos_getvect (0x9)
/* Set pointer to keyboard flags * /
FP SEG(kbFlags) = 0;
FP OFF(kbFlags) = 0x417;
/ * Add my ISR to the chain * /
dos setvect(0xg,KbIntProc) ;
/ * Print something while user presses keys... * /
/ * Until ESCAPE is pressed, then leave * /
while (getch() !=27){
printf ("Disallowing Ctrl+Alt+Delete... \n" );
}
/ * Remove myself from the chain * /
dos setvect(0x9,OldKbIntProc) ;
}
void _interrupt_far_cdecl KblntProc
unsigned short es,unsigned short ds, unsigned short di,
unsigned short si,unsigned short bp, unsigned short sp,
unsigned short bx,unsigned short dx, unsigned short cx,
unsigned short ax,unsigned short ip, unsigned short cs,
unsigned short flags)
{
/ * Get keystroke input from keyboard port * /
key_char =inp (0x60) ;
if( (( * kbFlags & KEY_MASK)= = (CTRL | ALT))
&& (key_char = =DELETE) ) {
/ * Reset the keyboard * /
junk = inp(0x61) ;
outp(0x61,(junk ] 0x80));
outp (0x61 ,iunk) ;
outp(0x60,(key_char | 0x80));
outp (0x60,0xgC) ;
}
/ * Reset the interrupt counter * /
outp (0x20,0x20) ;
/ * Now call the next ISR in line * /
( * OldKbIntProc) () ;
}
宸倖殻會峪嗤曾倖何蛍?main()痕方悶才囚徒嶄僅捲暦殻會KbIntProc()?main()痕方枠頁宥狛dos getvect()栖殊沫輝念囚徒嶄僅捲暦殻會(ISR)議仇峽?隼朔宥狛_dos_setvect()委囚徒嶄僅捲暦殻會算葎KbIntProc()?while儉桟音僅仇俊辺囚徒補秘?旺郡鹸嬉咫揖匯訳嶧連?岷欺Escape囚(凪ASCII鷹葎噴序崙方27)瓜梓和葎峭。輝Escape囚瓜梓和朔?殻會祥距喘dos_setvect()栖志鹸圻栖議囚徒嶄僅捲暦殻會。
隼遇?挫老畠壓KbIntProc()岻嶄。輝万瓜廾秘朔(宥狛念中侭初府議__dos_setvect()距喘)?万繍壓販採凪万痕方(賜殻會)岻念心欺侭嗤議囚徒補秘?咀緩?万嬬遍枠侃尖賜畠何評渠囚徒補秘。輝万俊辺欺匯倖囚扮?万氏殊臥囚徒?心匯心Ctrl囚才Alt囚頁倦厮将瓜梓和?旺拝殊臥侭俊辺議囚頁倦頁Delete囚。泌惚宸曾嶽秤趨脅窟伏阻?万祥氏鹸了囚徒?貫遇評渠俊辺欺議Delete囚。音砿侭俊辺議囚頁倦瓜策待、侃尖賜評渠?宸倖囚徒ISR悳勣距喘圻栖議囚徒嶄僅捲暦殻會(OldKbIntProc())?倦夸?柴麻字氏羨軸唯峭塰佩。
泌惚低範寔房深匯和?低祥氏窟孖宸倖殻會辛參俺資販採似囚賜怏栽囚?淫凄Ctrl+c才Ctrl+Break。咀緩?低頼畠辛參深打喘宸嶽一隈栖俺資Ctrl+Break怏栽囚。哘乎峺竃議頁?宸嶽圭隈議秘盃來曳熟膿—— 匯倖載弌議危列脅氏擬崑柴麻字唯峭塰佩。徽頁?低音勣咀緩祥音肇僥楼賜聞喘宸嶽圭隈。
椎担低哘乎泌採頼撹宸乂垢恬椿?輝隼?勣喘匯倖C殻會。和中頁匯倖酒晒阻議箭徨?万酌篇侭嗤議ctrl+Alt+Del似囚會双?壓乎怏栽囚梓和扮音恬販採郡哘?
# include <stdlib. h>
# include <dos. h>
/ * function prototypes * /
void ( interrupt far_cdecl KbIntProc)(
unsigned short es,unsigned short ds, unsigned short di,
unsigned short si,unsigned short bp, unsigned short sp,
unsigned short bx,unsigned short dx, unsigned short cx,
unsigned short ax,unsigned short ip, unsigned short cs,
unsigned short flags);
void( interrupt far cdecl * OldKbIntProc) (void);
unsigned char far * kbFlags; / * pointer to keyboard flags * /
int key char, junk; * miscellaneous variables * /
/ * keyboard scancode valuss * /
# define AI.T 0x8
# define CTRL 0x4
# define KEY MASK 0x0F
# define DELETE 0x53
void
main(int argc,char ** argv)
{
int i,idx ;
/ * Save old interrupt vectors * /
OldKbIntProc= dos_getvect (0x9)
/* Set pointer to keyboard flags * /
FP SEG(kbFlags) = 0;
FP OFF(kbFlags) = 0x417;
/ * Add my ISR to the chain * /
dos setvect(0xg,KbIntProc) ;
/ * Print something while user presses keys... * /
/ * Until ESCAPE is pressed, then leave * /
while (getch() !=27){
printf ("Disallowing Ctrl+Alt+Delete... \n" );
}
/ * Remove myself from the chain * /
dos setvect(0x9,OldKbIntProc) ;
}
void _interrupt_far_cdecl KblntProc
unsigned short es,unsigned short ds, unsigned short di,
unsigned short si,unsigned short bp, unsigned short sp,
unsigned short bx,unsigned short dx, unsigned short cx,
unsigned short ax,unsigned short ip, unsigned short cs,
unsigned short flags)
{
/ * Get keystroke input from keyboard port * /
key_char =inp (0x60) ;
if( (( * kbFlags & KEY_MASK)= = (CTRL | ALT))
&& (key_char = =DELETE) ) {
/ * Reset the keyboard * /
junk = inp(0x61) ;
outp(0x61,(junk ] 0x80));
outp (0x61 ,iunk) ;
outp(0x60,(key_char | 0x80));
outp (0x60,0xgC) ;
}
/ * Reset the interrupt counter * /
outp (0x20,0x20) ;
/ * Now call the next ISR in line * /
( * OldKbIntProc) () ;
}
宸倖殻會峪嗤曾倖何蛍?main()痕方悶才囚徒嶄僅捲暦殻會KbIntProc()?main()痕方枠頁宥狛dos getvect()栖殊沫輝念囚徒嶄僅捲暦殻會(ISR)議仇峽?隼朔宥狛_dos_setvect()委囚徒嶄僅捲暦殻會算葎KbIntProc()?while儉桟音僅仇俊辺囚徒補秘?旺郡鹸嬉咫揖匯訳嶧連?岷欺Escape囚(凪ASCII鷹葎噴序崙方27)瓜梓和葎峭。輝Escape囚瓜梓和朔?殻會祥距喘dos_setvect()栖志鹸圻栖議囚徒嶄僅捲暦殻會。
隼遇?挫老畠壓KbIntProc()岻嶄。輝万瓜廾秘朔(宥狛念中侭初府議__dos_setvect()距喘)?万繍壓販採凪万痕方(賜殻會)岻念心欺侭嗤議囚徒補秘?咀緩?万嬬遍枠侃尖賜畠何評渠囚徒補秘。輝万俊辺欺匯倖囚扮?万氏殊臥囚徒?心匯心Ctrl囚才Alt囚頁倦厮将瓜梓和?旺拝殊臥侭俊辺議囚頁倦頁Delete囚。泌惚宸曾嶽秤趨脅窟伏阻?万祥氏鹸了囚徒?貫遇評渠俊辺欺議Delete囚。音砿侭俊辺議囚頁倦瓜策待、侃尖賜評渠?宸倖囚徒ISR悳勣距喘圻栖議囚徒嶄僅捲暦殻會(OldKbIntProc())?倦夸?柴麻字氏羨軸唯峭塰佩。
泌惚低範寔房深匯和?低祥氏窟孖宸倖殻會辛參俺資販採似囚賜怏栽囚?淫凄Ctrl+c才Ctrl+Break。咀緩?低頼畠辛參深打喘宸嶽一隈栖俺資Ctrl+Break怏栽囚。哘乎峺竃議頁?宸嶽圭隈議秘盃來曳熟膿—— 匯倖載弌議危列脅氏擬崑柴麻字唯峭塰佩。徽頁?低音勣咀緩祥音肇僥楼賜聞喘宸嶽圭隈。