控制台下修改系统驱动状态的代码

csapp--键盘驱动程序的分析与修改 本实验包含 2 关,要求如下: Phase 1 键入 F12,激活功能,键入学生本人的姓名拼音,首尾字母等显示 比如:zhangsan,显示为:hagsa* Phase 2 键入“学生本人的学号” :激活功能,键入学生本人的姓名拼音,首尾字母等显示 比如:zhangsan,显示为:hagsa*, 键入“学生本人的学号-” :取消显示*功能 提示:完成本实验需要对 lab4/linux-0.11/k... 阅读详情

控制台下修改系统驱动状态的代码

最近在sinister大哥的指点下,学习一些驱动方面的东西。在调一个程序很头痛...于是写了这个东西,可以安装,卸载,启动和停止驱动,也可以查询当前系统加载驱动的状况。
没什么高深的东西,只是调用Advapi32.lib中API来实现的...代码有点乱...
VC 6.0 sp5 + win2k pro
---------
多谢sinister大哥的指点..

#include <stdio.h>
#include <windows.h>
#include <Winsvc.h>

LPENUM_SERVICE_STATUS EnumServices(SC_HANDLE, LPDWORD);
BOOL InstallService(SC_HANDLE hSCManager, LPCTSTR ServiceName, LPCTSTR ServiceExe);
BOOL RemoveService(SC_HANDLE hSCManager, LPCTSTR ServiceName);
BOOL StartService(SC_HANDLE hSCManager, LPCTSTR ServiceName);
BOOL StopService(SC_HANDLE hSCManager, LPCTSTR ServiceName);
BOOL IsAdmin(void);
void err_show(char*);
void Usage(char*);

int main(int argc, char* argv[])
{
    SC_HANDLE hSCManager = NULL;
    int          nRet = 0;

    nRet = IsAdmin();
    if(!nRet)
    {
        printf("Must administrator privilege!/n");
    }

    //
    // 打开服务控制管理器
    //
    hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
    if(hSCManager == NULL)
    {
        fprintf(stderr, "OpenSCManager() failed. --err: %d/n", GetLastError());
        return -1;
    }

    //
    // 调用EnumServices列举系统中的服务
    //
    LPENUM_SERVICE_STATUS lpServices = NULL;
    DWORD dwServicesReturned = 0;
    lpServices = EnumServices(hSCManager, &dwServicesReturned);
    if(lpServices == 0)
    {
        free(lpServices);
        CloseServiceHandle(hSCManager);
        return -1;
    }
   
    //
    // 显示服务信息
    //

    if(argc == 2)
    {
        //
        // 显示帮助信息
        //
        if(!stricmp(argv[1], "-h") || !stricmp(argv[1], "-help"))
        {
            Usage(argv[0]);
            return 0;
        }

        for(DWORD i = 0; i < dwServicesReturned; i++, lpServices++)
        {
            if(!stricmp(lpServices->lpServiceName, argv[1]))
                break;
        }

        if(i == dwServicesReturned)
        {
            printf("Service not found!/n");
            free(lpServices);
            CloseServiceHandle(hSCManager);
            return -1;
        }

        printf("[%s]/n", lpServices->lpDisplayName);
        printf("/tService Name: %s/n", lpServices->lpServiceName);
        printf("/tService Type: ");
        switch(lpServices->ServiceStatus.dwServiceType)
        {
        case SERVICE_FILE_SYSTEM_DRIVER: printf("File System Driver/n");
            break;
        case SERVICE_KERNEL_DRIVER: printf("Device Driver/n");
            break;
        default: printf("User-Mode Service/n");
            break;
        }

        printf("/tState: ");
        switch(lpServices->ServiceStatus.dwCurrentState)
        {
        case SERVICE_PAUSED: printf("PAUSED/n");
            break;
        case SERVICE_RUNNING: printf("RUNNING/n");
            break;
        case SERVICE_STOPPED: printf("STOPPED/n");
            break;
        default: printf("PENDING/n");
            break;
        }

        free(lpServices);
        CloseServiceHandle(hSCManager);
        return 0;
    }
    if(argc == 1)
    {
        for(DWORD i = 0; i < dwServicesReturned; i++, lpServices++)
            printf("%s    [%s]/n", lpServices->lpServiceName,
                lpServices->lpDisplayName);
        printf("/n/t/tTotal %d Service(s)./n/n", dwServicesReturned);

        free(lpServices);
        CloseServiceHandle(hSCManager);
        return 0;
    }

    // ------------------------
    // 分析命令行参数
    // ------------------------

    //
    // 安装服务
    //
    if(!stricmp(argv[1], "-install"))
    {
        if(argc != 4)
        {
            Usage(argv[0]);
            return 0;
        }
        nRet = InstallService(hSCManager, argv[2], argv[3]);
        if(!nRet)
        {
            printf("Install service failed./n");
            return -1;
        }
    }

    //
    // 卸载服务
    //
    if(!stricmp(argv[1], "-remove"))
    {
        if(argc != 3)
        {
            Usage(argv[0]);
            return 0;
        }
        nRet = RemoveService(hSCManager, argv[2]);
        if(!nRet)
        {
            printf("Remove service failed./n");
            return -1;
        }
    }

    //
    // 启动服务
    //
    if(!stricmp(argv[1], "-start"))
    {
        if(argc != 3)
        {
            Usage(argv[0]);
            return 0;
        }
        nRet = StartService(hSCManager, argv[2]);
        if(!nRet)
        {
            printf("Start service failed./n");
            return -1;
        }
    }

    //
    // 停止服务
    //
    if(!stricmp(argv[1], "-stop"))
    {
        if(argc != 3)
        {
            Usage(argv[0]);
            return 0;
        }
        nRet = StopService(hSCManager, argv[2]);
        if(!nRet)
        {
            printf("Stop service failed./n");
            return -1;
        }
    }
    // -----------------------------------------------------

    CloseServiceHandle(hSCManager);
    return 0;
}

//
//  EnumServices
//  列举系统的驱动
//  ----------------------
//  参数:
//        [IN]  SC_HANDLE hSCManager    服务管理器句柄
//        [OUT] LPDWORD   lpdwServices  系统中安装的驱动的数量
//  返回值:
//        成功返回ENUM_SERVICE_STATUS结构的指针,否则返回NULL
// 
LPENUM_SERVICE_STATUS EnumServices(SC_HANDLE hSCManager, LPDWORD lpdwServices)
{
    DWORD cbBytesNeeded = 0;
    DWORD cbBufSize = 0;
    DWORD dwServicesReturned = 0;
   
    int      nRet = 0;
   
    //
    // 首次调用EnumServicesStatus确定缓冲区的大小,由cbBytesNeeded返回
    //
    nRet = EnumServicesStatus(
        hSCManager,
        SERVICE_DRIVER,
        SERVICE_STATE_ALL,
        NULL,
        0,
        &cbBytesNeeded,
        lpdwServices,
        0);

    LPENUM_SERVICE_STATUS lpServices = (LPENUM_SERVICE_STATUS) malloc(cbBytesNeeded);
       
    cbBufSize = cbBytesNeeded;

    nRet = EnumServicesStatus(
        hSCManager,
        SERVICE_DRIVER,
        SERVICE_STATE_ALL,
        lpServices,
        cbBufSize,
        &cbBytesNeeded,
        lpdwServices,
        0);
    if(nRet == 0)
    {
        err_show("EnumServicesStatus()");
        return NULL;
    }

    return lpServices;
}

//
//  InstallService
//  安装服务
//  参数:
//      [IN] SC_HANDLE hSCManager   服务管理器句柄
//      [IN] LPCTSTR   ServiceName  服务名称
//      [IN] LPCTSTR   ServiceExe   可执行文件(需全路径)
//  输出:
//  成功:返回TRUE,否则返回FALSE
//
BOOL InstallService(SC_HANDLE hSCManager, LPCTSTR ServiceName, LPCTSTR ServiceExe)
{
    SC_HANDLE  schService;

    //
    // so #$%@! ...:)
    //
    printf("Install %s... ", ServiceExe);
    schService = CreateService( hSCManager,                 // SCManager database
                                ServiceName,             // name of service
                                ServiceName,             // name to display
                                SERVICE_ALL_ACCESS,      // desired access
                                SERVICE_KERNEL_DRIVER,   // service type
                                SERVICE_DEMAND_START,    // start type
                                SERVICE_ERROR_NORMAL,    // error control type
                                ServiceExe,              // service's binary
                                NULL,                    // no load ordering group
                                NULL,                    // no tag identifier
                                NULL,                    // no dependencies
                                NULL,                    // LocalSystem account
                                NULL                     // no password
                               );
    if (schService == NULL)
    {
        if(GetLastError() == ERROR_SERVICE_EXISTS)
        {
            printf("Service has already installed!/n");
        }
        err_show("CreateService()");
        return FALSE;
    }
    printf("Ok!/n");

    CloseServiceHandle(schService);
    return TRUE;
}

//
//  StartService
//  启动服务
//  ----------------
//  参数:
//      [IN] SC_HANDLE hSCManager 服务管理器句柄
//      [IN] LPCTSTR   ServiceName 驱动名称
//  返回值:
//      成功返回TRUE,否则返回FALSE
//
BOOL StartService(SC_HANDLE hSCManager, LPCTSTR ServiceName)
{
    SC_HANDLE  schService = NULL;
    int        nRet = 0;
   
    schService = OpenService(hSCManager, ServiceName, SERVICE_ALL_ACCESS);
    if(schService == NULL)
    {
        if(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST)
        {
            printf("Service is not exist!/n");
            return FALSE;
        }
        err_show("OpenService()");
        return FALSE;
    }

    nRet = StartService(schService, 0, NULL);
    if(!nRet)
    {
        if(GetLastError() == ERROR_SERVICE_ALREADY_RUNNING)
        {
            printf("Service is already running!/n");
            return nRet;
        }
        err_show("StartService()");
    }

    CloseServiceHandle(schService);
    return nRet;
}

//
//  StopService
//  停止驱动
//  ---------------
//  参数:
//      [IN] SC_HANDLE hSCManager  服务管理器句柄
//      [IN] LPCTSTR   ServiceName 服务名称
//  返回值:
//      成功返回TRUE,否则返回FALSE
//
BOOL StopService(SC_HANDLE hSCManager, LPCTSTR ServiceName)
{
    SC_HANDLE      schService = NULL;
    SERVICE_STATUS ServiceStatus;
    int            nRet = 0;

    schService = OpenService(hSCManager, ServiceName, SERVICE_ALL_ACCESS);
    if(schService == NULL)
        return FALSE;

    nRet = ControlService(schService, SERVICE_CONTROL_STOP, &ServiceStatus);
    if(!nRet)
    {
        switch(GetLastError())
        {
        case ERROR_SERVICE_NOT_ACTIVE:
            printf("Service has stopped!/n");
            return nRet;

        case ERROR_INVALID_SERVICE_CONTROL:
            printf("The requested control code is not valid!/n");
            return nRet;
        }
        err_show("ControlService()");
    }
   
    CloseServiceHandle(schService);
    return nRet;
}

//
//  RemoveService
//  卸载服务
//  ------------
//  参数:
//      [IN] SC_HANDLE hSCManager   服务管理器句柄
//      [IN] LPCTSTR   ServiceName  服务名称
//  返回值:
//      成功返回TRUE,否则返回FALSE
//
BOOL RemoveService(SC_HANDLE hSCManager, LPCTSTR ServiceName)
{
    SC_HANDLE schService;
    int          nRet = 0;

    schService = OpenService(hSCManager, ServiceName, SERVICE_ALL_ACCESS);
    if(schService == NULL)
        return FALSE;

    nRet = DeleteService(schService);
    if(!nRet)
    {
        err_show("DeleteService()");
    }

    CloseServiceHandle(schService);

    return nRet;
}

//
//  IsAdmin
//  判断当前用户是否有Administrator的权限
//  -----------------------------------------
//  参数:
//      N/A
//  返回值:
//      若具有权限返回TRUE,否则返回FALSE
//
BOOL IsAdmin(void)
{
    HANDLE                   hAccessToken;
    BYTE                     *InfoBuffer;
    PTOKEN_GROUPS            ptgGroups;
    DWORD                    dwInfoBufferSize;
    PSID                     psidAdministrators;
    SID_IDENTIFIER_AUTHORITY siaNtAuthority = SECURITY_NT_AUTHORITY;
    UINT                     i;
    BOOL                     bRet = FALSE;

    if(!OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hAccessToken))
        goto cleanup;

    InfoBuffer = new BYTE[1024];
    if(!InfoBuffer)
        goto cleanup;

    bRet = GetTokenInformation(hAccessToken,
                               TokenGroups,
                               InfoBuffer,
                               1024,
                               &dwInfoBufferSize);

    CloseHandle(hAccessToken);

    if(!bRet)
       goto cleanup;

    if( !AllocateAndInitializeSid(&siaNtAuthority,
                                 2,
                                 SECURITY_BUILTIN_DOMAIN_RID,
                                 DOMAIN_ALIAS_RID_ADMINS,
                                 0,0,0,0,0,0,
                                 &psidAdministrators) )
       goto cleanup;

    bRet = FALSE;

    ptgGroups = (PTOKEN_GROUPS)InfoBuffer;

    for(i = 0; i < ptgGroups->GroupCount; i++)
    {
        if(EqualSid(psidAdministrators,ptgGroups->Groups[i].Sid))
        {
            bRet = TRUE;
            break;
        }
    }

    FreeSid(psidAdministrators);

cleanup:

    if(InfoBuffer)
        delete InfoBuffer;

    return bRet;
}

void err_show(char* msg)
{
    fprintf(stderr, "%s failed. --err: %d/n", msg, GetLastError());
}

void Usage(char* msg)
{
    printf("+------------------------------+/n");
    printf("|      Services tool v0.1      |/n");
    printf("|      Write By CDrea          |/n");
    printf("|      2004-11-1               |/n");
    printf("|      thx to sinister         |/n");
    printf("|   http://www.safechina.net    |/n");
    printf("+------------------------------+/n");   
    printf("USAGE:/n");
    printf("  %s [[-install srv exe] | [-remove srv] | [-start srv] | [-stop srv]] [srv]/n/n", msg);
    printf("    %s          Show all service/n", msg);
    printf("    %s srv      Show status of srv_name/n", msg);
    printf("    -install srv exe     Install a service, and must full path of exe/n");
    printf("    -remove  srv         Remove a service/n");
    printf("    -start   srv         Start a service/n");
    printf("    -stop    srv         Stop a service/n");
    printf("eg./n");
    printf("  %s -install fw c://fw.sys", msg);
}

Windows客户端开发--使用WMI获取显卡详细信息(win32控制台程序) 昨天接受了WMI的基础知识,因为自己也是刚刚接触,也是应用型的,没有研究的更深更透。今天,就写一个真是的例子吧。比如说,我们要获得计算机显示适配器的详细信息,包括显卡的型号,显卡驱动的版本号,以及显卡当前的状态。Win32_VideoControllerclass Win32_VideoController : CIM_PCVideoController { uint16 AcceleratorCa 阅读详情

相关推荐

C++控制台实现三国杀人机对战:面向对象设计、状态机与AI决策实战

面向对象编程(OOP)是构建复杂软件系统的核心范式,它通过类、继承、多态等概念将现实世界实体抽象为可管理的代码模块。在游戏开发领域,这一原理尤为关键,它能将游戏角色、卡牌、规则等元素封装成独立对象,并通过事件驱动机制实现高效交互。其技术价值在于提升代码的可维护性、可扩展性和复用性,使得复杂规则(如卡牌结算、技能联动)的实现变得清晰可控。在应用场景上,OOP广泛用于游戏引擎、模拟系统和业务平台开发。本文以C++控制台实现“三国杀”人机对战项目为例,深入探讨如何运用**面向对象设计**和**状态机管理**来构建

adr5970的博客 447

ubuntu16.04更换nvidia驱动极简教程

1.禁用nouveau sudo echo "blacklist nouveau" &gt;&gt; /etc/modprobe.d/blacklist.conf sudo update-initramfs -u reboot 可使用以下命令查询是否禁用成功。 lsmod | grep nouveau 2.安装nvidia驱动 nvidia官网下载显卡对应驱动,更改文件权限。 ...

Rookie_tong的博客 2379

解决UE5全屏闪烁:NVIDIA驱动注册表修改与系统优化指南

在图形渲染和游戏开发中,全屏模式下的画面撕裂与闪烁是常见的兼容性问题,其根源往往在于应用程序、操作系统桌面窗口管理器(DWM)与显卡驱动之间的协同工作出现异常。理解其原理,即从传统的独占全屏到现代翻转模型的切换冲突,是解决问题的关键。这不仅能提升视觉体验,更对保障实时渲染应用的稳定性至关重要。针对虚幻引擎5(UE5)开发中遇到的全屏菜单闪烁问题,本文聚焦于通过修改NVIDIA驱动的特定注册表项,为应用程序创建个性化配置,强制其使用更稳定的全屏呈现模式。该方法结合了驱动层面的深度优化与系统级的图形设置调整,为

weixin_33947521的博客 415

不开源开发板定制固件方法

dd备份 SD卡镜像备份 克隆镜像

l461269717的专栏 1167

Codex SDK 控制台消息解析:从日志误读到状态信号解码

前端日志系统通常用于记录执行轨迹,但Codex SDK的控制台输出本质是嵌入式决策代理的状态广播信号。它遵循结构化四层格式(级别/模块/事件域/键值参数),承载实时状态跃迁、守卫条件触发与上下文健康度等语义信息。理解其作为‘可解析状态快照’而非线性日志的原理,是实现精准诊断的前提;技术价值在于将原始字符串升维为可映射SDK状态机、可关联业务事件、可生成自动化动作的诊断对象。典型应用场景包括风控拦截根因定位、SDK集成健康度量化、跨版本兼容性预警等。本文聚焦Codex SDK控制台消息的信号属性与三重解析机制

weixin_30301449的博客 400

Windows服务程序中实现对U盘的监控

VS2008开发环境,win32 console的程序。 主要参考了codeproject中的http://www.codeproject.com/KB/system/HwDetect.aspx 在注册的Windows Service中对U盘的插拔进行监控

加载驱动遍历驱动模块(使用控制码通讯)

加载驱动遍历驱动模块测试环境系统:虚拟机Windows 7 32bit工具:VS2015+Windbg等各种调试工具说明此demo只是内核编程的小小练习,只是遍历了驱动模块全路径,通过Ring3和Ring0通讯(使用比较复杂的控制码+MDL直接方式通讯),显示在了用户界面上.想要做其他功能,根据这个思路,遍历进程信息,模块信息等等都很容易做到.如果以后有机会再发其他功能的实现主要思路1.程序启动的...

Hades的博客 2383

DDR核心机制解析:从Burst到Prefetch的性能跃迁

本文深入解析了DDR内存性能跃迁的核心机制,重点阐述了Burst(突发传输)与Prefetch(预取)技术的协同工作原理。Burst机制通过连续传输数据减少访问延迟,而Prefetch则通过内部预取数据提升吞吐量,两者结合完美匹配现代CPU缓存行需求,是DDR3等内存实现高效带宽的关键。

weixin_29232121的博客 135

C++控制台RPG任务系统:数据驱动与状态机的实战设计

在游戏开发中,数据驱动设计是一种将游戏逻辑与具体数据分离的核心架构思想,它通过外部配置文件(如JSON)定义游戏内容,使程序逻辑更通用、更易维护。其原理在于构建一个中心化的管理器(如任务管理器),监听游戏内事件并驱动实体状态变化,这本质上是状态机模式的典型应用。这种架构的技术价值在于实现了高内聚、低耦合,极大提升了系统的可扩展性和可测试性。在应用场景上,它尤其适合角色扮演游戏(RPG)中任务、物品、技能等复杂系统的构建。本文以C++控制台RPG的任务系统为例,深入探讨如何运用数据驱动和状态机,设计一个包含任

weixin_34007906的博客 352

C# .NET6 TesseractOCR 图片文字识别

在你的项目中的tessdata-main文件夹找到这几个文件,并右键->属性设置为【如果较新则复制】有几个需要用到的模型,需要生成的时候复制到输出目录中,在项目中设置即可。TesseractOCR兼容 x86 与 x64。附 :ImageUtils.RegionCropping()源码。Visual Studio 2022 社区版。下载完成后解压在你的项目中,如图所示。从官方项目中获取模型数据, 网址为。

qq_44121554的博客 3854

分享一下使用Xilinx FPGA驱动MIPI DSI LCD屏的心路历程

分享一下调试用Xilinx FPGA驱动MIPI DSI LCD屏的心路历程,看到的朋友们,可以避免继续踩坑。

haoxingheng的专栏 5017

rK3568-修改RTL8211F-CG网口led显示灯状态

本章主要讲述如何修改RTL8211F-CG网口led灯的状态,按照网上网上一些教程的代码写进内核可能没有效果。本教程详细讲述了如何修改,并且使用一种相对简答的方式进行修改。

weixin_46396932的博客 2471

安装keil5(MDK)及导入pack包教程

首先说明的是我安装的Keil版本为Keil V5.29.0.0 1、安装软件 右键管理员权限运行安装包 设置安装路径以及pack的存放路径 随意输入First Name和E-mail 安装驱动 完成软件安装,然后可以先关闭弹出的Pack Install(一会再添加) 2、激活一下软件 打开桌面的Keil File → License Management(我之前注册过了) 右...

hrx-@@ 10万+

CSAPP LAB4 键盘驱动程序的分析与修改(谢罪)

准备环境 略 Demo 键盘功能主要由如下几个部分实现: keyboard.S:接受键盘中断反馈的键盘码。 tty_io.c :二级处理输入数据 console.c :三级处理,之后打印到控制台 / 大致流程如下 keyboards(read/put_queue)------>tty_io(write_queue)—>console(asm)---->屏幕 / ...

黑色低级高中生的博客 5363

大华 DSS 数字监控系统 itcBulletin SQL 注入漏洞复现

大华 DSs 数字监控系统是大华开发的一款安防视频监控系统,拥有实时监视、云台操作、录像回放、报警处理、设备管理等功能。大华 DSS存在SQL注入漏洞,攻击者 pota/services/itcBuletin 路由发送特殊构造的数据包,利用报错注入获取数据库敏感信息。攻击者除了可以利用 SQL注入漏词获取数据库中的信息例如,管理员后台密码、站点的用户人人信息)之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限poc验证是否存在漏洞如果你想查询用户名和密码。

holyxp的博客 4004

5、模糊风险评估

本文介绍了基于模糊逻辑的风险评估方法,探讨了如何在不确定、不完整信息环境下进行高效的风险分析。文章涵盖了模糊集合与隶属度函数的基本概念、模糊推理系统的流程,并结合犯罪风险、金融风险和医疗诊断等实际案例,展示了模糊风险评估的应用价值和技术细节。此外,还介绍了模糊贝叶斯网络、模糊综合评价等进阶工具与方法,为多领域风险管理提供了理论支持和实践指导。

mango的博客 182

让framebuffer不显示光标,在没有控制台的framebuffer上显示logo

使用Framebuffer显示画面,总有一个小黑方块,一看就像是控制台光标。为了去掉它,上网一查,有人说把fbcon.c文件里的fbcon_cursor()函数改成空函数。我觉得这样改内核代码太野蛮了,以后也不好维护移植,不作为首选方案。自己看代码,发现在bit_cursor()里面,如果驱动注册了光标函数,就调用驱动的光标函数,否则调用soft_cursor()。赶紧翻到驱动代码amba-clc

leverett的专栏 3372

DeerFlow 系列教程 第十六篇 | 实战案例一——用 DeerFlow 进行深度研究

在日常使用 AI Agent 时,最常见的需求之一就是对某个主题进行全面、系统的研究。多源信息采集——不能只依赖单次搜索,需要从多个角度搜索不同来源交叉验证——不同来源的信息需要相互印证,避免单一信源的偏差结构化输出——最终产出的不是零散的信息片段,而是有组织的研究报告传统做法是人工反复搜索、阅读、整理。传统手工研究: DeerFlow 深度研究:人工搜索 → 阅读页面 → 记笔记 提交研究主题│ │▼ ▼换关键词 → 再搜索 → 再阅读 ┌──────────────────┐。

weixin_43674738的博客 170

前端控制台打印,状态码总结

近期实习期间接手了一个购物的电商管理系统的前端项目,在写代码的过程中出现错误,而且在控制台打印了太多次不同错误状态码,一直不停的去搜索,查找解决办法,今天将自己遇到的几个常见的状态码,以及搜索出来的总结一下。不对的地方希望大家多多提意见。 分享 200 请求已成功,请求所希望的响应头或数据体将随此响应返回。出现此状态码是表示正常状态。 201 请求已经被实现,而且有一个新...

qq_42493121的博客 875

Vue3 - 详解实现网站接入钉钉扫码登录功能,钉钉授权生成登录二维码用户用手机扫描二维码登陆,支持弹框式、浏览器单独新开页显示,钉钉扫描二维码登录详细流程及示例代码,最新vue集成钉钉扫码授权登录!

vue3,nuxt3,钉钉,扫码登录,vue3钉钉扫码登陆,钉钉授权第三方WEB网站扫码登录功能,钉钉扫码登录第三方网站,单点登录,二维码不显示,报错,扫了没反应,出错,vue3钉钉扫码登录,内嵌,获取个人信息,pc网页钉钉登录,钉钉扫码登录怎么新开一页,跳页显示二维码,内嵌登录二维码,iframe新页面弹出,弹出一个小窗口显示登录二维码,登录报错,扫码没反应,解决手机点登录报错没反应,官方文档,手机扫描钉钉二维码登录网站,页面弹出一个小窗口而不是打开一个页面,vue3中使用iframe实现另开小窗口扫码登

🏆 前端领域优质创作者 3696

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

MINIX 3控制台系统详解:从硬件适配器到虚拟终端

MINIX 3的控制台系统是用户与操作系统交互的核心界面,由TTY设备驱动程序管理。该系统主要由两个关键组件构成:屏幕显示子系统和键盘输入子系统。这两个组件协同工作,为用户提供了完整的终端交互体验。 ## 显示适配器支持 MINIX 3支持多种经典的PC显示适配器,每种适配器在文本模式下都有其独特特性: 1. **MDA(Monochrome Display Adapter)**: -

gitblog_00246的博客 532

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【esp32 控制台】-命令

可以通过调出idf的控制台,结束控制台用ctrl + ]。esp32的控制台就像linux中的shell一样,可以通过命令对程序进行配置。主要用于开发调试、系统监控和交互式操作。控制台的作用调试输出:显示程序运行时的日志信息、调试信息和错误消息交互式命令:允许开发者通过命令行与 ESP32 交互系统监控:查看内存使用情况、任务状态等系统信息参数配置:设置和修改系统参数固件更新:通过串口进行固件升级。

shui12912的博客 1913

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

服务器的cd驱动器怎么修改盘符,windows 2016 修改驱动器盘符

windows 2016 修改驱动器盘符 内容精选换一换本文以服务器的操作系统为“Windows Server 2016 Standard 64bit”为例,提供云硬盘的初始化操作指导。MBR格式分区支持的磁盘最大容量为2 TB,GPT分区表最大支持的磁盘容量为18 EB,因此当为容量大于2 TB的磁盘分区时,请采用GPT分区方式。关于磁盘分区形式的更多介绍,请参见初始化数据盘场景及磁盘分区形本文...

weixin_31100705的博客 3417

在Rocky Linux系统下修改网卡驱动版本

在Rocky Linux系统下通过修改网卡驱动版本的方法,解决服务器网卡不稳定的问题

ziele_008的博客 448

台式计算机磁盘视图怎么改,xp系统无法修改盘符提示因为磁盘管理控制台视图不是最新状态怎么办...

近日有xp系统用户发现电脑出现问题了,就是他原本有两块硬盘,突然第二块硬盘除了一个分区可见外,其它分区都无法显示,到“磁盘管理”中,又能看到磁盘分区的存在,修改盘符也改不了,提示“\因为磁盘管理控制台视图不是最新状态.......”,遇到这样的问题该怎么办呢,现在为大家讲解一下具体的解决方法。1、磁盘管理控制台视图不是最新状态解决方法之一:1)先在桌面打开“我的电脑”或“计算机”这个图标;2)进入...

weixin_36180611的博客 827
上一篇: 关于 Service 设计初步(MSDN节选翻译)
下一篇: 用汇编写系统服务程序
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值