自己编制windows的后台进程程序

Windows内存机制原理 进程的虚拟地址空间 WIndows为每个32位进程分配了4GB的虚拟地址空间。每个进程都认为自己拥有4GB的内存空间, 32位 CPU可以取地址的空间为2的32次方,就是4GB。 当我们在Windows中双击一个应用程序图标后,操作系统创建该应用程序的一个进程,Windows使得每个进程都拥有2GB的地址空间,这2GB地址空间用于程序存放代码、数据、堆栈、自由存储区(堆),另外2GB用于共享系统使用。 这些地址是该进程空间中的虚拟地址,并不是物理内存中的地址。 虚拟空间只是Windows为该进程分配的 阅读详情

自己编制windows的后台进程程序

转自: http://blog.youkuaiyun.com/feijj2002_/archive/2005/05/24/379777.aspx 在WINDOWS NT 中有一个功能强大的SERVICE 管理器, 它管理着一部分实现重要功能的后台进程, 例如FTP.HTTP.RAS. 网络Message 等等, 这些后台进程被称之为Service, 他们可以在系统启动时就加载, 可以运行在较高的优先级, 可以说是非常靠近系统核心的设备驱动程序中的一种. WINDOWS95 没有提供SERVICE 管理器, 取而代之的是一个简单的登记接口, 可以类似的称之为WINDOWS95 下的Service( 不过严格的讲,WINDOWS95 下是没有Service 的), 同样的, 通过这个登记接口, 我们可以使自己的程序随系统启动而最先运行, 随系统关闭而最后停止, 和操作系统结合在一起, 实现许多独特的功能. 首先我们可以先来看看一些相关的知识。 进程数据库(PDB) 介绍   在Windows 的核心数据结构中, 有一个重要的进程管理结构叫进程数据库, 它位于Kernel32 的公用内存堆中,可以通过GetCurrentProcessID(...) 得到指向该结构的指针, 以下是部分PDB 的组成, 与本文直接相关的是PDB 偏移21h 处的Service 标志字节, 通过后面的伪码分析, 我们可以清楚的看到所谓登记为Windows95 或Windows98 下的Service 进程, 只不过是把它相应的PDB 中该标志字节置为1 而已. 偏移量长度            说明 ============================================ +00h   DWORD      Type // Kernel32 对象的类型 +04h   DWORD      CReference // 参考计数 +08h   DWORD      Un1 // 未知 +0ch   DWORD      pSomeEvent // 指向K32OBJ_EVENT 指针 +10h   DWORD      TerminationStatus // 活动标志或返回值 +14h   DWORD      Un2 // 未知 ... +21h   BYTE       Flags1 // Service 标记,                          // "1" 是Service 进程,                          // "0" 普通进程 ... +24h   DWORD      pPSP  // DOS PSP 指针 ... ============================================ 实现接口   (1) Windows95 中提供的简单的Service 接口是一个32 位的API: RegisterServiceProcess, 由于在VC++ 的Online help 中得不到关于这个API 的确切解释, 笔者不得不针对此API 进行了逆向分析, 以下是在Windows95 的Kernel32.dll 中该API 的伪码. 我们可以清楚的看到Window95 内部到底是怎样做的, 其实处理的非常简单. BOOL RegisterServiceProcess( DWORD dwProcessID, DWORD dwType ) {   HANDLE dwPID;   if( dwProcessID == NULL )      dwPID = dwCurrentProcessID; // Get global kernel32 variable   else       // Call some kernel functions      if( ( dwPID = CheckPID( dwProcessID ) == NULL )          return FALSE;   if( dwType == 1 )   {      *(BYTE *)( dwPID + 0x21 ) | = 0x01;      return TRUE;   }   if( dwType == 0 )   {      *(BYTE *)( dwPID + 0x21 ) & = 0xFE;      return TRUE;   }   return FALSE; }     以下为函数原形: BOOL    RegisterServiceProcess( DWORD dwPID, DWORD dwType ) 参数:   dwPID: 进程ID, NULL 代表当前进程         dwType: RSP_SIMPLE_SERVICE 为登记                 RSP_UNREGISTER_SERVICE 为取消登记 返回值: TRUE:   调用成功         FALSE:  调用失败   (2) 另外, 为了让Service 进程有机会在BOOT 后就启动,Windows95 的Registry 中提供了加载方法: 在KEY " MyComputer/HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/RunServices " 加入自己的应用程序命令行, 即可实现开机自动加载. 当然, 如果你得机器中没有这个Key, 自己建一个也是可以的. 例程 ---- 下面是实现例程, 所有代码经过了测试, 可以方便的加入到自己的项目文件中. ---- 头文件: // File:           service.h // The head file of "service.cpp" // Note: 1. You must use C++ compiler //     2. The platform is WIN32 (WINNT & WIN95) #ifndef _SERVICE_H #define _SERVICE_H /////////////////////////////////////////////////// USED FOR WIN95 SERVICE // Micros #define RSP_SIMPLE_SERVICE                      1 #define RSP_UNREGISTER_SERVICE          0 // Function types for GetProcAddress #define RegisterServiceProcess_PROFILE  (DWORD (__stdcall *) (DWORD, DWORD)) // Service Fuctions in Win95 BOOL    W95ServiceRegister(DWORD dwType); BOOL    W95StartService( DWORD dwType ); #endif CPP 文件: // File:                service.cpp --- implement the service #include "service.h" /////////////////////////////////////////////////// USED FOR WIN95 SERVICE 登记为Service 子程序: //////////////////////////////////////////////////////////////////////////////// / // Define:              BOOL    W95ServiceRegister(DWORD dwType) // Parameters:  dwType  --- Flag to register or unregister the service //            RSP_SIMPLE_SERVICE      means register //            RSP_UNREGISTER_SERVICE  means unregister // Return:  TRUE --- call success; FALSE --- call failer BOOL    W95ServiceRegister( DWORD dwType ) {         // Function address defination         DWORD   (__stdcall * hookRegisterServiceProcess)                    ( DWORD dwProcessId, DWORD dwType );         // Get address of function         hookRegisterServiceProcess = RegisterServiceProcess_PROFILE                                                  GetProcAddress    (GetModuleHandle("KERNEL32"),   TEXT("RegisterServiceProcess"));         // Register the WIN95 service         if(hookRegisterServiceProcess(NULL,dwType)==0)                 return FALSE;         return TRUE; } 加入注册表程序: #define SERVICE_NAME    TEXT("SERVICE") // Define:              BOOL    W95StartService( DWORD dwType ) // Parameters:  dwType  --- Flag to register or unregister the service //            RSP_SIMPLE_SERVICE      means register //            RSP_UNREGISTER_SERVICE  means unregister // Return: TRUE --- call success; FALSE --- call failer BOOL W95StartService( DWORD dwType ) {         // Local Variables         TCHAR   lpszBuff[256];         LPTSTR  lpszStr = lpszBuff +128;         LPTSTR  lpszName        = lpszBuff;         HANDLE  hKey            = NULL;         DWORD   dwStrCb         = 0;         DWORD   dwValueType     = 0;         // Get service name currently         lpszName = GetCommandLine();         for( int i = _tcslen(lpszName)-1; i>=0; i-- )         {                 if( ( lpszName[i] != '"' )&&( lpszName[i]!=' ') )                         break;                 else if( lpszName[i] == '"' )                         lpszName[i] = '/0';         }         if( lpszName[0] == '"' )                 lpszName = lpszName +1;         // Registe as start up service         if( RegOpenKeyEx (HKEY_LOCAL_MACHINE, TEXT( "SOFTWARE//Microsoft//Windows//CurrentVersion//RunServices"),                      0,                      KEY_QUERY_VALUE | KEY_SET_VALUE,                      &hKey ) != ERROR_SUCCESS )         {                 if( RegCreateKey(       HKEY_LOCAL_MACHINE, TEXT( "SOFTWARE//Microsoft//Windows//CurrentVersion//RunServices"),                                         &hKey ) != ERROR_SUCCESS )                 {                         //DebugOut( "RegCreateKey() error!");                         return FALSE;                 }         }         dwValueType     = REG_SZ;         dwStrCb         = 128;         // Take value         if( RegQueryValueEx(hKey,                                 SERVICE_NAME,                                 0,                                 &dwValueType,                                 (LPBYTE)lpszStr,                                 &dwStrCb ) == ERROR_SUCCESS )                  {                 // Find this key value                 if( _tcscmp( lpszStr, lpszName )==0 )                 {                         // Remove the service                         if( dwType == RSP_UNREGISTER_SERVICE )                         { if( RegDeleteValue( hKey, SERVICE_NAME ) == ERROR_SUCCESS )                                 {                                         RegCloseKey ( hKey );                                         return TRUE;                                 }                                 RegCloseKey( hKey );                                 return FALSE;                         }                         // Already exist service                         if( dwType == RSP_SIMPLE_SERVICE )                         {                                 //DebugOut("Already registed!");                                 RegCloseKey( hKey );                                 return TRUE;                         }                 }                 // Not find it         } // No this value         // Unregiste return         if( dwType == RSP_UNREGISTER_SERVICE )         {                 RegCloseKey( hKey );                 return TRUE;         }         // No this value then create it         if( dwType == RSP_SIMPLE_SERVICE )         {                 dwStrCb = 128;                 // Set value                 if( RegSetValueEx(hKey,                                         SERVICE_NAME,                                         0,                                         REG_SZ,                                         (CONST BYTE *)lpszName,                                         dwStrCb ) != ERROR_SUCCESS )                 {                         //DebugOut("RegSetValueEx() error!");                         RegCloseKey( hKey );                         return FALSE;                 }                 RegCloseKey( hKey );                 return TRUE;         }         // Unknow type         RegCloseKey( hKey );         return FALSE; } 主程序: // WinMain function is the entry of the this program int APIENTRY WinMain(HINSTANCE hInstance,                      HINSTANCE hPrevInstance,                      LPSTR     lpCmdLine,                      int       nCmdShow) {         if( W95ServiceRegister( RSP_SIMPLE_SERVICE ) )         {                 W95StartService( RSP_SIMPLE_SERVICE );         }         MessageBox(NULL, "Sample service", "SERVICE", MB_OK );         UNREFERENCED_PARAMETER( hInstance );         UNREFERENCED_PARAMETER( lpCmdLine );         UNREFERENCED_PARAMETER( nCmdShow );         UNREFERENCED_PARAMETER( hPrevInstance );         return 0; }   运行这个程序, 等到MessageBox 弹出后, 从WINDOWS 中退出到LOG ON 状态, 你会看见MessageBox 一直保持打开状态直至受到响应或系统关机.

隐藏进程(隐藏在进程管理器中的显示) 使用与xp, win7等各种windows平台,而且不用注入API方式,免除杀毒软件误判之忧. 方法非常简单,就是使用最普通的往进程的窗口发送消息的办法. 立即下载

相关推荐

隐藏进程RegisterServiceProcess函数使用

9x或2000下用RegisterServiceProcess函数隐藏进程,NT架构下用不了

RegisterServiceProcess

函数功能描述:RegisterServiceProcess函数注册或者取消一个进程为服务。当用户注销之后,服务进程仍可运行。函数原型:DWORD RegisterServiceProcess(  DWORD dwProcessId,    DWORD dwType        );参数:dwProcessId    指定注册为服务的进程标识(Id),当前进程可以用NULL。dwType    指

wjling2009的专栏 5974

海康威视SADP SDK实战:5分钟搞定局域网设备搜索(附C++代码示例)

本文详细解析了海康威视SADP SDK在局域网设备搜索中的高效应用,通过C++代码示例展示如何快速实现设备发现与信息获取。SADP协议支持全面设备信息采集和实时状态更新,适用于智能安防和物联网管理场景,帮助开发者5分钟内完成设备搜索功能集成。

rum55的博客 873

Windows API(一)

如果你不想自己的程序被从Ctrl+Alt+Del弹出的窗口中强行关闭, 介绍一个Windows未公布的API函数给你:  RegisterServiceProcess(ProcessID:Long,Type:Long) 该函数存在于Kernal32.dll中. Process指向进程的ID,Type表示是否向系统注册该进程,是1,否0.  GetClientRect

galbanum 2072

Imatest-Star模块(西门子星图)

星图分析指南:基于ISO12233标准的MTF测试方法,通过放射状射线和正弦灰度变化评估相机SFR性能。

weixin_64706696的博客 1565

LDPC码译码原理——概率公式推导

怎么说呢,一直以来都想写一下博客。近半年多来我一直在学习LDPC码译码上的东西,主要是在FPGA实现上的,所以这次想写一些关于这方面的内容,包括译码的原理、仿真以及实现。(当然是基于准循环LDPC码上实现的)不过呢,我写这个的初衷是为了让初学者理解入门用的,而不是在大牛面前班门弄斧,有错误之处欢迎大家批评指正。不知道会不会有人一开始像我一样,为了学好LDPC码,先去好好了解其它的诸如RS码或者是卷...

stand_by_me123的博客 2万+

关于RegisterServiceProcess

函数功能描述:RegisterServiceProcess函数注册或者取消一个进程为服务。当用户注销之后,服务进程仍可运行。函数原型:DWORD RegisterServiceProcess(  DWORD dwProcessId,    DWORD dwType        );参数:dwProcessId    指定注册为服务的进程标识(Id),当前进程可以用NULL。dwType    指

4844

Quartus的Signal Tap II的使用技巧

Signal Tap II全称Signal Tap II Logic Analyzer,是第二代系统级调试工具,它集成在Quartus II软件中,可以捕获和显示实时信号,是一款功能强大、极具实用性的FPGA片上调试工具软件。传统的FPGA板级调试是由外接的逻辑分析仪连接到FPGA的控制引脚,将内部引号引出至引脚I/O上,接着进行板级调试。

qq_37624854的博客 5899

RegisterServicesProcess

*注册服务进程BOOLWINAPIRegisterServicesProcess(    DWORD dwProcessId)参数:dwProcessID为欲注册进程的ID返回TRUE表示成功,返回False表示失败但注册后究竟可以干什么 没有相关解释{    USER_API_MSG m;    PREGISTERSERVICESPROCESSMSG a = &m.u.RegisterServi

Inside Windows 1672

AI使用指南:6个超实用的Prompt提示词模板

最近越来越多人开始接触AI,但其实想要让AI更懂你,关键是掌握对的提示词模板!今天就给大家分享6种超实用的Prompt提示词模板,不管你是小白还是老手都能用

程序员世杰 8173

利用 AI 自动生成 BDD(行为驱动开发)格式的 Gherkin 测试用例

文章摘要 当前BDD测试领域正经历AI驱动的变革浪潮。传统Gherkin用例编写面临四大痛点:语法负担重、场景发现成本高、一致性差和维护困难。2025-2026年,AI生成Gherkin的工具生态快速成熟,主要分为五类:测试管理平台内置AI(如TestRail 10.2)、Jira插件(如AssertThat BDD)、独立AI平台(如PrimeCompass)、CLI工具和研究原型。其中,TestRail实现生成-执行闭环,AssertThat采用多阶段Agent工作流提升质量,PrimeCompass则

ZXSXJ的博客 205

Windows脚本:监控并自动重启某个进程

通过批处理脚本实现监控并重启某个进程(应用程序)的全过程,实现开机自动启动监测,且保证被监测的程序挂掉后自动重启

weixin_44462773的博客 1万+

YOLO11的持续学习:如何在不遗忘旧数据的情况下学习新类别

类增量学习(Class-Incremental Learning, CIL)是持续学习(Continual Learning)的一个重要分支,它指的是模型在不遗忘已学旧类别知识的前提下,逐步学习新类别的能力。与传统机器学习假设所有数据一次可用不同,类增量学习更贴近现实世界应用场景——新的类别数据往往会随着时间推移逐步出现。 举个例子,假设我们已经训练好一个YOLOv11模型用于检测"猫"和"狗"两种动物,现在需要让模型新增识别"兔子"的能力。传统方法需要收集所有类别(猫、狗、兔子)的数据重新训练,而类增量

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1966

在Windows中不重启结束iCloud进程

本文只是解决:在Windows下,运行Apple公司的iCloud后,在不重启情况下,无法(即结束进程)的小问题,并不是讨论如何关闭iCloud服务等大问题。

qinhong1997的博客 527

「UG/NX」BlockUI 控件集合目录大纲

Block UI Styler 模块设计对话框是官方推荐使用的对话框制作方法,它能够与NX自身风格相统一,在实际开发中经常使用。文字内容包含:NX所有控件介绍的链接、内部控件调用的基础介绍、官方案例查看路径、控件的特殊用法篇链接、番外篇链接。

何曾参静谧的博客 2674

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

操作系统《实验二.进程调度实验》

1.每个进程被指定一个优先级,调度程序总是选择具有较高优先级的进程。纯粹的优先级调度方案可能会导致低优先级进程长时间处于饥饿状态;一个进程的优先级可随着它的时间或执行历史而变化,也可以由应用程序或用户手动设置在Linux中,数字越小优先级越高;Windows等部分系统,数字越大优先级越高2.调度的准则面向用户:单个用户或进程感知到的系统行为面向系统:处理器使用的效果和效率性能相关:与性能相关的数值的,定量的,可以很容易地度量的准则性能无关:或者本质上是定性的,或者不容易测量和分析。

m0_60024689的博客 2341

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

计算机操作系统第二章 进程的描述与控制

1、进程的引入为了使多道程序能够并发执行,且为了能对并发执行程序加以描述和控制以提高资源利用率和系统效率。2、进程的定义进程是具有独立功能的程序关于某个数据集合在计算机系统中的一次执行过程。系统进行资源分配和调度的、一个可并发执行的独立单位。进程是程序的一个实例,是程序的一次执行进程和程序的比较程序是静态的,在外存中,进程是动态的,在内存中程序可长期保存;而进程是有生命周期的。程序是指令的有序集合;而进程则是由程序、数据和进程控制块三部分组成。

分享学习期间的笔记心得 2701

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

在应用程序中开关WINDOWS系统

在实际应用时,修改了系统的某些设置,必须重新启动WINDOWS;而有些时候演示完一个软件后,必须关闭WINDOWS;同时在演示期间,又禁止用户强行关闭WINDOWS.如何解决上述问题,笔者编制了一个程序全面地解决了上述问题.实现原理: 1.重新启动WINDOWS,关闭WINDOWS,结束当前的用户进程都是通过调用EXITWINDOWSEX函数实现的.该函数有两个参数,前

1120

Windows定时任务计划无法显示任务程序界面的问题解决

这个笔者想了一下,选第二种“不管用户是否登录都要运行”主要为的目的就是系统用户未登陆时的情况,那么通过第一种选择“只在用户登录时运行”加上系统不睡眠,也可以这样曲线救国的方式来解决。最终,源于笔者把定时任务设置成打开浏览器用于测试后,发现浏览器并未成功打开,而手动打开双击浏览器图标的时候,却提示已经在后台运行,从而发现了。而且,只有需要在前台界面运行的工作,才会受到第二种选择的影响,如果任务本身不需要和界面打交道,那么也就不会存在什么运行的问题了。找到正确的切入点,网上再搜,终于对症下了药。

eyelike的专栏 7524

进程调度算法

进程调度算法实验、先来先服务、短作业优先、优先级调度算法

2301_77523019的博客 823

windows脚本编制引擎_说说 Windows 脚本宿主运行的几种方式

1.在命令提示符下运行脚本使用Windows脚本宿主,可以在命令提示符下运行脚本。CScript.exe提供了用于设置脚本属性的命令行开关。使用CScript.exe运行脚本用下列语法在命令提示符下键入命令:cscript[hostoptions...][scriptname][scriptoptionsandparameters]用“宿主选项”可以启用或禁用各种Wind...

weixin_39645343的博客 643

学习如何编制WINDOWS系统下的钩子函数

原文转自:http://www.3800hk.com/news/w45/129917.html【编辑提示:本文内容仅供参考,切勿用于不当之处!】 把鼠标关标滑过一个窗口时,该窗口的有关消息将显示在主窗口中。当您按下“Unhook”时,应用程序将卸载钩子。主窗口使用一个对话框来作为它的主窗口。它自定义了一个消息WM_MOUSEHOOK,用来在主窗口和DLL之间传递消息。当主窗口接收到该消息时

weixu_2008的专栏 1004

如何在windows程序中读取bios内容

源代码说明: 大家都知道,windows接管了对物理内存的直接存取,而bios信息存在物理内存 的f000:0000处,关键就是如何读取物理内存。 查阅了msdn的文章后,发现以下有几个函数和物理内存访问有关: NTSTATUS ZwOpenSection(OUT PHANDLE SectionH

4886

python 简单的扫描主机小程序

这是一个以前自己写的简单的多进程版本的扫描主机的小程序,运用ping然后TTL大于64的为windows主机,小于64的为linux主机 以下为代码 import os from multiprocessing import Process import re #多进程版本 def myfunc(ip): cmd="ping %s -w 1000 -n 1"%ip r2=o...

qq_45070118的博客 795
上一篇: error C2871: 'System' : a namespace with this name does not exist
下一篇: 交换机 路由器 集线器的区别
K行天下
博客等级 码龄19年 358粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值