我在一个服务程序中访问HKEY_CURRENT_USER键下面 Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings,
能够成功实现
RegOpenKeyEx(HKEY_CURRENT_USER,
TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings"),
0,
KEY_QUERY_VALUE,
&hKey)
,但是当我查询
RegQueryValueEx(hKey,TEXT("ProxyEnable"),NULL,NULL,(LPBYTE)&ProxyEnable,&dwBufLen);的时候,发现返回的ProxyEnable有问题,我使用的是代理,可读出来的是0值,为什么?我怀疑是权限的问题,因为我访问HKEY_LOCAL_MACHINE主键下面的
Software\\Microsoft\\Windows\\CurrentVersion\\Run能构成功查询,但服务程序是system权限,怎么会存在权限的问题呢?
能够成功实现
RegOpenKeyEx(HKEY_CURRENT_USER,
TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings"),
0,
KEY_QUERY_VALUE,
&hKey)
,但是当我查询
RegQueryValueEx(hKey,TEXT("ProxyEnable"),NULL,NULL,(LPBYTE)&ProxyEnable,&dwBufLen);的时候,发现返回的ProxyEnable有问题,我使用的是代理,可读出来的是0值,为什么?我怀疑是权限的问题,因为我访问HKEY_LOCAL_MACHINE主键下面的
Software\\Microsoft\\Windows\\CurrentVersion\\Run能构成功查询,但服务程序是system权限,怎么会存在权限的问题呢?
解决方案 »
- 对话库 和 窗口,是什么关系呀?基于“对话框”的工程,能称作基于‘窗口’的工程吗?
- 为什么我注册了程序,双击的时候为什么提示找不到文件?两天了,搞不定,求助啊!
- 寻找熟悉基于SPI的数据报过滤程序开发的朋友
- 特急!编程题
- 为何我的对话框只能容纳255个控件????
- 用ADO写access用insert into 语句,为什么说语法错误?急
- unexpected end of file found
- 请指点,谢谢
- 请问,哪里有gb2312码转换成unicode码的码表文件?
- 我在MFC中加载mapx控件来显示地图,现在想用CDC在地图上画一个显示位置的箭头
- 应该挂接哪些API函数
- 排序算法,编译出错,请教如何修改?
只有当程序注册为服务时,不能得到正确的值,ProxyEnable总是返回0,而Proxy
// cl whoami.cpp /c1 /c
// link whoami.obj /nodefaultlib msvcrt.lib advapi32.lib kernel32.lib /align:16
//
//
//
#pragma comment(lib,"Advapi32.lib")
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h>
#define UULEN 256
int main(int argc,char *argv[])
{
//OpenProcess();
HANDLE hp , htoken;
char buff[2560];
unsigned long size = 2560;
TOKEN_USER *tuser;
PTOKEN_GROUPS tgroup;
PTOKEN_OWNER towner;
PTOKEN_SOURCE tsource;
PSID sid;
char user[UULEN], domain[UULEN];
SID_NAME_USE snu;
hp = htoken = INVALID_HANDLE_VALUE;
hp = GetCurrentProcess();
if(!OpenProcessToken(hp, TOKEN_QUERY | TOKEN_QUERY_SOURCE , &htoken))
{
printf("OpenProcessToken error : %u\r\n", GetLastError());
goto exit_main;
}
if(!GetTokenInformation(htoken, TokenUser, (void*)buff, size, &size))
{
printf("GetTokenInformation error : %u\r\n", GetLastError());
goto exit_main;
}
tuser = (TOKEN_USER*)buff;
sid = tuser->User.Sid;
size = UULEN;
if(!LookupAccountSid(NULL, sid, user, &size, domain, &size, &snu))
{
printf("LookupAccountSid error : %u\r\n", GetLastError());
goto exit_main;
}
// printf("you are '%s\\%s'\r\n", domain, user);
printf( "Domain : %s\nUser : %s\n", domain, user);
size = UULEN *10;
if(!GetTokenInformation(htoken, TokenGroups , (void*)buff, size, &size))
{
printf("GetTokenInformation error : %u\r\n", GetLastError());
goto exit_main;
}
tgroup = (PTOKEN_GROUPS)buff;
int len ;
len = tgroup->GroupCount;
printf( "Group :\n");
int i;
for( i = 0; i< len ; i++)
{
sid = tgroup->Groups[i].Sid ;
size = UULEN;
if(!LookupAccountSid(NULL, sid, user, &size, domain, &size, &snu))
{
// printf("LookupAccountSid error : %u\r\n", GetLastError());
break;
}
printf("\t[%d] %s\n",i+1, user );
}
size = 2560;
if(!GetTokenInformation(htoken, TokenOwner, (void*)buff, size, &size))
{
printf("GetTokenInformation error : %u\r\n", GetLastError());
goto exit_main;
}
towner = (PTOKEN_OWNER)buff;
sid = towner->Owner;
size = UULEN;
if(!LookupAccountSid(NULL, sid, user, &size, domain, &size, &snu))
{
printf("LookupAccountSid error : %u\r\n", GetLastError());
goto exit_main;
}
printf( "Owner : %s\n", user );
size = 2560;
if(!GetTokenInformation(htoken, TokenSource, (void*)buff, size, &size))
{
printf("GetTokenInformation error : %u\r\n", GetLastError());
goto exit_main;
}
tsource = (PTOKEN_SOURCE ) buff;
tuser = (TOKEN_USER*)buff;
sid = tuser->User.Sid;
size = UULEN;
printf( "Source : %.8s\n", tsource->SourceName );
exit_main:
if(htoken != INVALID_HANDLE_VALUE)CloseHandle(htoken);
if(hp != INVALID_HANDLE_VALUE)CloseHandle(hp);
return 0;
}