none
用c语言编写的一个提升权限的程序,老是报错,求大神指导一下 RRS feed

  • 问题

  • #include "tchar.h"
    #include "windows.h"
    bool enableshutdownpriv()
    {
    HANDLE htoken=NULL;
    TOKEN_PRIVILEGES tkp={0};
    }
      if ( !OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) ) {
      return FALSE;
    }

    if(!lookupprivilegevalue(null,se_shutdown_name,&tkp.privilege[0].LUID)){
    CloseHandle(htoken);
    return false;
    }
    tkp.privilegecount=1
    tkp.privilege[0].attributes=se_privilege_enable;
    if(!adjuesttokenprivileges(htoken,false,&tkp,sizeof(TOKEN_PRIVILEGES),NULL,NULL))
    {
    CloseHandle(htoken);
    return false;
    }
    {
    return true;
    }

    >d:\程序\自编\自编\自编2.cpp(8) : error C2059: 语法错误 : “if”
    1>d:\程序\自编\自编\自编2.cpp(8) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
    1>d:\程序\自编\自编\自编2.cpp(8) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
    1>d:\程序\自编\自编\自编2.cpp(12) : error C2059: 语法错误 : “if”
    1>d:\程序\自编\自编\自编2.cpp(12) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
    1>d:\程序\自编\自编\自编2.cpp(12) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
    1>d:\程序\自编\自编\自编2.cpp(16) : error C2143: 语法错误 : 缺少“;”(在“.”的前面)
    1>d:\程序\自编\自编\自编2.cpp(16) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>d:\程序\自编\自编\自编2.cpp(18) : error C2059: 语法错误 : “if”
    1>d:\程序\自编\自编\自编2.cpp(19) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
    1>d:\程序\自编\自编\自编2.cpp(19) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
    1>d:\程序\自编\自编\自编2.cpp(23) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
    1>d:\程序\自编\自编\自编2.cpp(26) : error C2143: 语法错误 : 缺少“)”(在“常量”的前面)
    1>d:\程序\自编\自编\自编2.cpp(26) : error C2143: 语法错误 : 缺少“;”(在“常量”的前面)
    1>d:\程序\自编\自编\自编2.cpp(26) : error C2059: 语法错误 : “)”
    1>d:\程序\自编\自编\自编2.cpp(27) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
    1>d:\程序\自编\自编\自编2.cpp(27) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
    1>d:\程序\自编\自编\自编2.cpp(54) : fatal error C1004: 发现意外的文件尾

    2013年2月1日 4:54

答案

  • bool enableshutdownpriv()
    {
    	HANDLE htoken=NULL;
    	TOKEN_PRIVILEGES tkp={0};
    	if ( !OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
    	{
    		return false;
    	}
    
    	if(!lookupprivilegevalue(null,se_shutdown_name,&tkp.privilege[0].LUID)){
    		CloseHandle(htoken);
    		return false;
    	}
    	tkp.privilegecount=1
    	tkp.privilege[0].attributes=se_privilege_enable;
    	if(!adjuesttokenprivileges(htoken,false,&tkp,sizeof(TOKEN_PRIVILEGES),NULL,NULL))
    	{
    		CloseHandle(htoken);
    		return false;
    	}
    	return true;
    }

    帮您修改了一下,我猜您的函数实现是这个样子的~

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2013年2月3日 6:52
    版主

全部回复

  • 你仔细检查一下

    你的大括号匹配的有问题


    新浪微博http://weibo.com/xianglitian,欢迎围观

    2013年2月2日 2:46
  • bool enableshutdownpriv()
    {
    	HANDLE htoken=NULL;
    	TOKEN_PRIVILEGES tkp={0};
    	if ( !OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
    	{
    		return false;
    	}
    
    	if(!lookupprivilegevalue(null,se_shutdown_name,&tkp.privilege[0].LUID)){
    		CloseHandle(htoken);
    		return false;
    	}
    	tkp.privilegecount=1
    	tkp.privilege[0].attributes=se_privilege_enable;
    	if(!adjuesttokenprivileges(htoken,false,&tkp,sizeof(TOKEN_PRIVILEGES),NULL,NULL))
    	{
    		CloseHandle(htoken);
    		return false;
    	}
    	return true;
    }

    帮您修改了一下,我猜您的函数实现是这个样子的~

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2013年2月3日 6:52
    版主