XP中,RasGetErrorString()正常,但WIN7、8中,不能完整取到错误信息,什么原因?

时间:2021-01-14 22:51:49

#include <stdio.h>
#include <windows.h>
#include <ras.h>
#include <raserror.h>
#include <locale.h>

//typedef unsigned int UINT;
#define STRINGLENGTH 1024

void GetRasError(wchar_t *szTitle, wchar_t *szBuf, UINT dwError)
{
    DWORD dwRetVal = ERROR_SUCCESS;
    dwRetVal = RasGetErrorString( (UINT)dwError, szBuf, STRINGLENGTH );
    if ( dwRetVal != ERROR_SUCCESS )
    {
        wsprintf( szBuf, L"-------------------------------------------", dwError);
        wsprintf( szTitle, L"错误");
    }
    else if ( dwRetVal == ERROR_INVALID_PARAMETER )
    {
        wsprintf( szBuf, L"ERROR_INVALID_PARAMETER %u", dwError);
    }
    else
    {
        wsprintf( szTitle, L"错误 %u", dwError);
    }
}

int main()
{
    setlocale(LC_ALL, "");
    FILE *fp = NULL;
    if ((fp=fopen("RASERROR.txt","w+")) == NULL)
    {
        fwprintf(stderr,L"\nError opening file\n");
        return 1;
    }

    int i;
    for(i=RASBASE; i<=956/*RASBASEEND*/; i++)
    {
        wchar_t szTitle[STRINGLENGTH] = { 0 };
        wchar_t szBuf[STRINGLENGTH] = { 0 };

        GetRasError((wchar_t *)&szTitle, (wchar_t *)&szBuf, (UINT)i);
        fwprintf(fp, L"%i\t%s\n",i,szBuf);
    }

    fclose(fp);
    fp = NULL;

    return 0;
}


运行结果:
600 某操作处于挂起状态。
601 检索到一个无效端口句柄。
602 指定的端口已经打开。
603 呼叫方缓冲区太小。
604 指定了错误的信息。
605 -------------------------------------------
606 无法连接指定端口。
607 -------------------------------------------
608 指定了一个不存在的设备。
609 指定了一个不存在的设备类型。
610 指定了一个无效的缓冲区。
611 -------------------------------------------
612 指定了一个没有分配的路由: 
613 -------------------------------------------
614 -------------------------------------------
615 找不到指定的端口。

4 个解决方案

#1


没准是因为你Win 7、8是64位的。

#2


测试的WIN7是32位的,WIN8当时让同事帮测,倒没注意这个问题。

#3


以管理员身份运行
以XP兼容模式运行

#4


引用 3 楼 zhao4zhong1 的回复:
以管理员身份运行
以XP兼容模式运行


试了,貌似跟这两个选项无关。

#1


没准是因为你Win 7、8是64位的。

#2


测试的WIN7是32位的,WIN8当时让同事帮测,倒没注意这个问题。

#3


以管理员身份运行
以XP兼容模式运行

#4


引用 3 楼 zhao4zhong1 的回复:
以管理员身份运行
以XP兼容模式运行


试了,貌似跟这两个选项无关。