writefile GetLastError()

场景:使用WriteFile() GetLastError()的返回值是5,怎么提升权限?多谢

使用WriteFile() GetLastError()的返回值是5,如何提升权限?谢谢
我自己写了1个OCX 然后再写了JS调用这个OCX来打开串口,但是发送数据需要使用WriteFile函数。结果数据发不出来,调试发现GetLastError返回值是5,拒绝访问,都说是权限不够。如何解决,再VC VB中使用这两个却没有问题。 来高人!!
C/C++ code
ComHandle=CreateFile(Port,
        GENERIC_READ||GENERIC_WRITE,
        0,NULL,OPEN_EXISTING,NULL,NULL);
    if(ComHandle==INVALID_HANDLE_VALUE){MessageBox("1"); return 0;}
    char tmpP[11]="9600,n,8,1";//设置通讯参数
    DCB dcb;
    if(GetCommState(ComHandle,&dcb)==0){MessageBox("2");return -1;}
    if(BuildCommDCB(tmpP,&dcb)==0){MessageBox("3");return -1;}
    if(SetCommState(ComHandle,&dcb)==0){MessageBox("4");return -1;}
    COMMTIMEOUTS TimeOuts;//设置超时时间
    GetCommTimeouts(ComHandle,&TimeOuts);
    TimeOuts.ReadIntervalTimeout=2000;
    TimeOuts.ReadTotalTimeoutConstant=400;
    TimeOuts.ReadTotalTimeoutMultiplier=400;
    TimeOuts.WriteTotalTimeoutMultiplier=40;
    TimeOuts.WriteTotalTimeoutConstant=400;
    if(SetCommTimeouts(ComHandle,&TimeOuts)==0){MessageBox("6");return -2;}
    if(SetupComm(ComHandle,2048,1024)==0){MessageBox("7");return -3;}//设置缓冲区
    //PurgeComm(ComHandle,PURGE_RXABORT||PURGE_RXCLEAR);
    //PurgeComm(ComHandle,PURGE_TXABORT||PURGE_TXCLEAR);
    if(ComHandle<0){MessageBox("111");return 111;}
     BYTE m_SendBuffer[1];    
    DWORD m_Number;
     m_SendBuffer[0]=0x06;
     if(WriteFile(ComHandle, m_SendBuffer, 1 , &m_Number,NULL)==0)
    {
        DWORD ErrorCode;
        ErrorCode=GetLastError();
        char temp[5];
        sprintf(temp,"%d",ErrorCode);
        MessageBox(temp);
        MessageBox("here!");
        return -5;
    }
    CloseHandle(ComHandle);
//    Write();
    MessageBox(Port);
    return 0;


------解决方案--------------------
对JS的限制本来就会比较大,不然浏览器下载执行js代码隐患很大。。
------解决方案--------------------
昨天也碰到个权限问题,看看这个
C/C++ code

BOOL    NSys::EnablePrivilege(TCHAR * name, BOOL fEnable, HANDLE hToken)
{
    BOOL                bRetVal;
    int                    nError;
    HANDLE                hNewToken = NULL;
    TOKEN_PRIVILEGES    priv = { 1, {0, 0, fEnable ? SE_PRIVILEGE_ENABLED : 0} };

    LookupPrivilegeValue(0, name, &priv.Privileges[0].Luid);
    if(hToken == NULL)
        OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hNewToken);
    else
        hNewToken = hToken;

    bRetVal = AdjustTokenPrivileges(hNewToken, FALSE, &priv, sizeof(priv), 0, 0);
    if(bRetVal == FALSE)
    {
        nError = ::GetLastError();
        if(hToken == NULL)    
            CloseHandle(hNewToken);

        ::SetLastError(nError);
        return FALSE;
    }

    if(hToken == NULL)    
        CloseHandle(hNewToken);
    return TRUE;
}