做一胩服务程序(service),以系统账号(system account)启动,然后,再由该服务程序来加载这个程序即可.如果程序可以修改的话,就直接改为service.
解决方案 »
- 请高手指点迷津有关图像处理问题。参与者有分,有价值的建议可另开贴给分!!!
- 关于_RecordsetPtr的方法、函数问题
- 有人在ECLIPSE环境下开发过C/C++吗
- 如何限制EDIT的输入格式
- SDI中还可以在添加一个象状态栏一样的FORM吗?
- CRecordset 如何写按日期查询的语句?
- 急!请教线程同步的问题!!!!
- 各路英豪:我想制作一个启动画面,但又不想使用MFC的Splash screen之类的什么的,用 C+SDK 如何实现?100分相送!!!!!!!
- 如何在程序中运行 dir c: >>c:\1.ret,这样一个dos 命令,而且不能出现dos窗口
- 请问要想成为一名vc高手,建议几本书好吗???
- GetEnvironmentStrings 问题
- 哪里错了???
在main入口点里必须注册一个ServiceMain函数,这是服务程序的入口点;
提供一个回调函数,用RegisterServiceCtrlHandler来登记这个回调,用以接收各种服务控制指令;
服务程序要做成CONSOLE子系统,通常它没有窗口,也没有运行在桌面帐户上。
服务程序有其自己的框架,一般的程序就算注册成服务,也是无法响应系统的服务启动,停止等操作的.具体自己去查看createservice()相关的API.也可以利用第三方程序以服务模式加载你的程序,象srvany.exe等.
http://msdn.microsoft.com/en-us/library/bb540476(VS.85).aspx总的来说就是要实现windows管理服务程序的几个接口函数。
这是靠查询进程令牌信息得到的。程序如下。#include <windows.h>
#include <stdio.h>/* */
void GetProcessAuth(long pid)
{
//获得运行进程的用户身份,此处对于8以上的进程没问题,对于8,0进程无法列出(8是Win2000下的,WinXP下为4)
SID_NAME_USE peUse;
HANDLE hp;
HANDLE hToken;
int isok;
char buf[0x400];
char buf1[100];
char buf2[100];
DWORD dwNumBytesRet;
DWORD dwNumBytesRet1;hp=OpenProcess(0x400, 0, pid);//0x400 is PROCESS_QUERY_INFORMATION
isok=OpenProcessToken(hp, 0x20008, &hToken);//这个0x20008不知道什么,TOKEN_QUERY?
if(isok)
{
isok=GetTokenInformation(hToken, TokenUser, &buf, 0x400, &dwNumBytesRet);
if(isok)
{
dwNumBytesRet=100;
dwNumBytesRet1=100;
isok=LookupAccountSid(NULL, (DWORD *) (*(DWORD *)buf), buf1, &dwNumBytesRet, buf2, &dwNumBytesRet1, &peUse);
if(isok)
{
printf("Run Auth:%s\\%s \n", buf2, buf1);
}CloseHandle(hToken);
}
}CloseHandle(hp);
}/* */
int main(int argc, char **argv)
{
long pid;
if(argc != 2)
{
printf(" - %s ProcessId\n", argv[0]);
return 0;
}pid=strtol(argv[1], 0, 0);
GetProcessAuth(pid);
return 0;
}
用CreateProcess()启动你要设为system的程序