禁止程序运行
来源:互联网 发布:淘宝stylenanda真假 编辑:程序博客网 时间:2024/05/04 16:17
禁止程序运行的方式有很多种,第一种方法是写一个单独的程序并且能够在开机的时候自动运行,而这个程序的作用就是监视进程信息,如果发现目标进程则立即把它干掉,从而达到禁止程序运行的目的。第二种方法是写一个服务,这种方法个人觉得比较隐蔽。下面我就拿第二种方法作一下讲解。
写服务的方法也有很多,而笔者比较喜欢的是用c来写,用c写服务比较直观,也比较随心所欲。如果有的读者不知道该如何写windows下的服务程序,请自行查阅相关资料。下面就给出程序的源代码。
#include
#include
#include
#include
#include
#define SLEEP_TIME 5000
#define LOGFILE "C:\\MemoryStatus\\memstatus.txt"
////////////////////////////////////////////////////////////
// Declare several global variables to share
// their values across multiple functions of your program.
////////////////////////////////////////////////////////////
SERVICE_STATUS ServiceStatus;
SERVICE_STATUS_HANDLE hStatus;
////////////////////////////////////////////////////////////
// Make the forward definitions of functions prototypes.
//
////////////////////////////////////////////////////////////
void ServiceMain(int argc, char** argv);
void ControlHandler(DWORD request);
int InitService();
int ScanProcess();
int WriteToLog(char* str)
{
FILE* log;
log = fopen(LOGFILE, "a+");
if (log == NULL){
OutputDebugString("Log file open failed.");
return -1;
}
fprintf(log, "%s\n", str);
fclose(log);
return 0;
}
// Service initialization
int InitService()
{
OutputDebugString("Monitoring started.");
int result;
result = WriteToLog("Monitoring started.");
return(result);
}
// Control Handler
void ControlHandler(DWORD request)
{
switch(request)
{
case SERVICE_CONTROL_STOP:
OutputDebugString("Monitoring stopped.");
WriteToLog("Monitoring stopped.");
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
SetServiceStatus (hStatus, &ServiceStatus);
return;
case SERVICE_CONTROL_SHUTDOWN:
OutputDebugString("Monitoring stopped.");
WriteToLog("Monitoring stopped.");
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
SetServiceStatus (hStatus, &ServiceStatus);
return;
default:
break;
}
// Report current status
SetServiceStatus (hStatus, &ServiceStatus);
return;
}
void ServiceMain(int argc, char** argv)
{
int error;
ServiceStatus.dwServiceType =
SERVICE_WIN32;
ServiceStatus.dwCurrentState =
SERVICE_START_PENDING;
ServiceStatus.dwControlsAccepted =
SERVICE_ACCEPT_STOP |
SERVICE_ACCEPT_SHUTDOWN;
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwServiceSpecificExitCode = 0;
ServiceStatus.dwCheckPoint = 0;
ServiceStatus.dwWaitHint = 0;
hStatus = RegisterServiceCtrlHandler(
"MemoryStatus",
(LPHANDLER_FUNCTION)ControlHandler);
if (hStatus == (SERVICE_STATUS_HANDLE)0)
{
// Registering Control Handler failed
return;
}
// Initialize Service
error = InitService();
if (error)
{
// Initialization failed
ServiceStatus.dwCurrentState =
SERVICE_STOPPED;
ServiceStatus.dwWin32ExitCode = -1;
SetServiceStatus(hStatus, &ServiceStatus);
return;
}
// We report the running status to SCM.
ServiceStatus.dwCurrentState =
SERVICE_RUNNING;
SetServiceStatus (hStatus, &ServiceStatus);
// MEMORYSTATUS memory;
// The worker loop of a service
while (ServiceStatus.dwCurrentState ==
SERVICE_RUNNING)
{
int flag;
if(ScanProcess())
flag=1;
else
flag=0;
if (flag==0)
{
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
ServiceStatus.dwWin32ExitCode = -1;
SetServiceStatus(hStatus, &ServiceStatus);
return;
}
Sleep(SLEEP_TIME);
}
return;
}
int ScanProcess()
{
PROCESSENTRY32 pe;
char *name=(char *)malloc(sizeof(char)*128);
if(name==NULL)
{
WriteToLog("无法分配内存!");
return 0;
}
FILE *fp;
HANDLE process;
fp=fopen("C:\\MemoryStatus\\ScrutinyProcess.txt","rb");
if(!fp)
{
WriteToLog("无法打开文件");
return 0;
}
fgets(name,128,fp);
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
Process32First(hSnapshot,&pe);
do{
if(!strcmp(name,pe.szExeFile))
{
process=OpenProcess(PROCESS_TERMINATE,FALSE,pe.th32ProcessID);
if(process)
{
TerminateProcess(process,0);
WriteToLog(name);
}
}
}while(Process32Next(hSnapshot,&pe));
free(name);
CloseHandle(hSnapshot);
fclose(fp);
return 1;
}
void main(int argc, char* argv[])
{
SERVICE_TABLE_ENTRY ServiceTable[2];
ServiceTable[0].lpServiceName = "MemoryStatus";
ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;
ServiceTable[1].lpServiceName = NULL;
ServiceTable[1].lpServiceProc = NULL;
// Start the control dispatcher thread for our service
StartServiceCtrlDispatcher(ServiceTable);
}
把想要禁止运行的进程名字写在日志文件里就可以达到目的,如果不知道如何安装服务那你可要好好学习了^_^
///////////////////////////////////////////////////////////////////////////////////
只要在其安装目录下新建一个文件名为ws2_32.dll的文件,这样系统就会以文件出错误而禁止运行
本方法适用基于NT系统的WinXP,Win2000,Win2003!WinArray8没有试~~
比较险恶~~用的时候再删除该文件就是。
至于对付什么人~~嘿嘿,网吧上网的应该有感触。
想在自己电脑上禁止朋友玩游戏,又不能让人看出来是故意的(伤害感情),这招就够绝的~~
比如:
说qq吧,我的qq放在d:\qq\里面
你可以把我说的文件放在这个里面
就ok了,不过自己用的时候记得一定要删除~不然也是上不去的~
=================================================
原理:
当程序试图访问网络的时候,首先调用ws2_32.dll这个动态链接库!
但一般程序有个问题就是先找自己目录下面有没有这个文件,有个话就调用自己目录下面的!
否则的话就调用WIN目录下面的。。
=================================================
DLL 文件: ws2_32 或者 ws2_32.dll
DLL 名称: WinSock 2.0 32bit
描述:
ws2_32.dll是Windows Sockets应用程序接口,用于支持Internet和网络应用程序。
///////////////////////////////////////////////////////////////////////////////////
通过修改注册表禁止运行某些程序
用户可以通过修改注册表,来禁止运行某些具有危险性或不想让其运行的程序,以达到维护系统安全性的目的。
通过修改注册表禁止运行某些程序,可进行如下操作:
(1)打开“注册表编辑器”。
(2)选择HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer 注册表项。
(3)单击右键,在弹出的快捷菜单中选择“新建”?“DWORD 值”命令,新建一个类型为REG_DWORD 的值项。
(4)将该值项命名为“DisallowRun”。
(5)双击该值项,在弹出的“编辑DWORD 值”对话框中的“数值数据”文本框中修改数值为“1”,“基数”选项组中选择“十六进制”选项。
(6)右击Explorer 注册表项,在其弹出的快捷菜单中选择“新建”?“项”命令,新建一个Explorer 注册表项的子项。
(7)将该子项命名为“DisallowRun”。
(8)右击该子项,在弹出的快捷菜单中选择“新建”?“字串值”命令,新建一个类型为REG_SZ 的值项。
(Array)将该值项命名为“1”,双击该值项,在弹出的“编辑字符串”对话框中的“数值数据”文本框中输入要禁止运行的程序名称。例如要禁止运行记事本程序,可输入“Notepad.exe”。
(10)若要禁止多个程序,重复(8)~(Array)步即可。
(11)设置完毕后,重新启动计算机即可。
禁止后的程序,若通过“开始”菜单或资源管理器运行,则会出现如图15.30 所示
的“限制”对话框。
注意:被禁止的程序单击“开始”按钮,选择“更多程序”|“附件”|“命令提示符”命令,在“命令提示符”窗口中输入“Notepad.exe”命令,仍然可以运行。
写服务的方法也有很多,而笔者比较喜欢的是用c来写,用c写服务比较直观,也比较随心所欲。如果有的读者不知道该如何写windows下的服务程序,请自行查阅相关资料。下面就给出程序的源代码。
#include
#include
#include
#include
#include
#define SLEEP_TIME 5000
#define LOGFILE "C:\\MemoryStatus\\memstatus.txt"
////////////////////////////////////////////////////////////
// Declare several global variables to share
// their values across multiple functions of your program.
////////////////////////////////////////////////////////////
SERVICE_STATUS ServiceStatus;
SERVICE_STATUS_HANDLE hStatus;
////////////////////////////////////////////////////////////
// Make the forward definitions of functions prototypes.
//
////////////////////////////////////////////////////////////
void ServiceMain(int argc, char** argv);
void ControlHandler(DWORD request);
int InitService();
int ScanProcess();
int WriteToLog(char* str)
{
FILE* log;
log = fopen(LOGFILE, "a+");
if (log == NULL){
OutputDebugString("Log file open failed.");
return -1;
}
fprintf(log, "%s\n", str);
fclose(log);
return 0;
}
// Service initialization
int InitService()
{
OutputDebugString("Monitoring started.");
int result;
result = WriteToLog("Monitoring started.");
return(result);
}
// Control Handler
void ControlHandler(DWORD request)
{
switch(request)
{
case SERVICE_CONTROL_STOP:
OutputDebugString("Monitoring stopped.");
WriteToLog("Monitoring stopped.");
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
SetServiceStatus (hStatus, &ServiceStatus);
return;
case SERVICE_CONTROL_SHUTDOWN:
OutputDebugString("Monitoring stopped.");
WriteToLog("Monitoring stopped.");
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
SetServiceStatus (hStatus, &ServiceStatus);
return;
default:
break;
}
// Report current status
SetServiceStatus (hStatus, &ServiceStatus);
return;
}
void ServiceMain(int argc, char** argv)
{
int error;
ServiceStatus.dwServiceType =
SERVICE_WIN32;
ServiceStatus.dwCurrentState =
SERVICE_START_PENDING;
ServiceStatus.dwControlsAccepted =
SERVICE_ACCEPT_STOP |
SERVICE_ACCEPT_SHUTDOWN;
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwServiceSpecificExitCode = 0;
ServiceStatus.dwCheckPoint = 0;
ServiceStatus.dwWaitHint = 0;
hStatus = RegisterServiceCtrlHandler(
"MemoryStatus",
(LPHANDLER_FUNCTION)ControlHandler);
if (hStatus == (SERVICE_STATUS_HANDLE)0)
{
// Registering Control Handler failed
return;
}
// Initialize Service
error = InitService();
if (error)
{
// Initialization failed
ServiceStatus.dwCurrentState =
SERVICE_STOPPED;
ServiceStatus.dwWin32ExitCode = -1;
SetServiceStatus(hStatus, &ServiceStatus);
return;
}
// We report the running status to SCM.
ServiceStatus.dwCurrentState =
SERVICE_RUNNING;
SetServiceStatus (hStatus, &ServiceStatus);
// MEMORYSTATUS memory;
// The worker loop of a service
while (ServiceStatus.dwCurrentState ==
SERVICE_RUNNING)
{
int flag;
if(ScanProcess())
flag=1;
else
flag=0;
if (flag==0)
{
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
ServiceStatus.dwWin32ExitCode = -1;
SetServiceStatus(hStatus, &ServiceStatus);
return;
}
Sleep(SLEEP_TIME);
}
return;
}
int ScanProcess()
{
PROCESSENTRY32 pe;
char *name=(char *)malloc(sizeof(char)*128);
if(name==NULL)
{
WriteToLog("无法分配内存!");
return 0;
}
FILE *fp;
HANDLE process;
fp=fopen("C:\\MemoryStatus\\ScrutinyProcess.txt","rb");
if(!fp)
{
WriteToLog("无法打开文件");
return 0;
}
fgets(name,128,fp);
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
Process32First(hSnapshot,&pe);
do{
if(!strcmp(name,pe.szExeFile))
{
process=OpenProcess(PROCESS_TERMINATE,FALSE,pe.th32ProcessID);
if(process)
{
TerminateProcess(process,0);
WriteToLog(name);
}
}
}while(Process32Next(hSnapshot,&pe));
free(name);
CloseHandle(hSnapshot);
fclose(fp);
return 1;
}
void main(int argc, char* argv[])
{
SERVICE_TABLE_ENTRY ServiceTable[2];
ServiceTable[0].lpServiceName = "MemoryStatus";
ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;
ServiceTable[1].lpServiceName = NULL;
ServiceTable[1].lpServiceProc = NULL;
// Start the control dispatcher thread for our service
StartServiceCtrlDispatcher(ServiceTable);
}
把想要禁止运行的进程名字写在日志文件里就可以达到目的,如果不知道如何安装服务那你可要好好学习了^_^
///////////////////////////////////////////////////////////////////////////////////
只要在其安装目录下新建一个文件名为ws2_32.dll的文件,这样系统就会以文件出错误而禁止运行
本方法适用基于NT系统的WinXP,Win2000,Win2003!WinArray8没有试~~
比较险恶~~用的时候再删除该文件就是。
至于对付什么人~~嘿嘿,网吧上网的应该有感触。
想在自己电脑上禁止朋友玩游戏,又不能让人看出来是故意的(伤害感情),这招就够绝的~~
比如:
说qq吧,我的qq放在d:\qq\里面
你可以把我说的文件放在这个里面
就ok了,不过自己用的时候记得一定要删除~不然也是上不去的~
=================================================
原理:
当程序试图访问网络的时候,首先调用ws2_32.dll这个动态链接库!
但一般程序有个问题就是先找自己目录下面有没有这个文件,有个话就调用自己目录下面的!
否则的话就调用WIN目录下面的。。
=================================================
DLL 文件: ws2_32 或者 ws2_32.dll
DLL 名称: WinSock 2.0 32bit
描述:
ws2_32.dll是Windows Sockets应用程序接口,用于支持Internet和网络应用程序。
///////////////////////////////////////////////////////////////////////////////////
通过修改注册表禁止运行某些程序
用户可以通过修改注册表,来禁止运行某些具有危险性或不想让其运行的程序,以达到维护系统安全性的目的。
通过修改注册表禁止运行某些程序,可进行如下操作:
(1)打开“注册表编辑器”。
(2)选择HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer 注册表项。
(3)单击右键,在弹出的快捷菜单中选择“新建”?“DWORD 值”命令,新建一个类型为REG_DWORD 的值项。
(4)将该值项命名为“DisallowRun”。
(5)双击该值项,在弹出的“编辑DWORD 值”对话框中的“数值数据”文本框中修改数值为“1”,“基数”选项组中选择“十六进制”选项。
(6)右击Explorer 注册表项,在其弹出的快捷菜单中选择“新建”?“项”命令,新建一个Explorer 注册表项的子项。
(7)将该子项命名为“DisallowRun”。
(8)右击该子项,在弹出的快捷菜单中选择“新建”?“字串值”命令,新建一个类型为REG_SZ 的值项。
(Array)将该值项命名为“1”,双击该值项,在弹出的“编辑字符串”对话框中的“数值数据”文本框中输入要禁止运行的程序名称。例如要禁止运行记事本程序,可输入“Notepad.exe”。
(10)若要禁止多个程序,重复(8)~(Array)步即可。
(11)设置完毕后,重新启动计算机即可。
禁止后的程序,若通过“开始”菜单或资源管理器运行,则会出现如图15.30 所示
的“限制”对话框。
注意:被禁止的程序单击“开始”按钮,选择“更多程序”|“附件”|“命令提示符”命令,在“命令提示符”窗口中输入“Notepad.exe”命令,仍然可以运行。
- 禁止程序多次运行
- 禁止程序运行
- 禁止程序运行
- win7禁止程序运行
- 禁止程序多次运行
- windows下禁止程序运行
- 如何禁止运行某些程序
- 如何禁止某个程序运行?
- C# winform 禁止程序运行
- 想禁止程序运行么?如此简单
- 禁止同一运用程序同时运行
- 用注册表禁止运行指定的程序
- 组策略禁止某个程序运行
- 禁止运行程序多个实例
- 如何禁止上传目录运行php程序
- c#禁止程序多次重复运行执行
- 如何禁止qq等程序运行
- C#禁止重复运行程序,并激活原托盘程序
- 可分级视频编码
- 堆栈的区别
- 数据挖掘九律
- VC6.0生成文件的种类和作用
- 用c语言编写全局键盘钩子
- 禁止程序运行
- c2-3-main-frm_102901-13100渲染日志
- 迷宫
- mac下删除svn文件
- grub4dos和syslinux双重引导U盘制作
- 硬盘/U盘安装Puppy Linux方法
- IANA分配的端口列表及本以端口信息获取
- WINDOWS优化大师揭密
- Dependent Managent(环形依赖)