win10 非Unicode应用程序显示设置

在win10上打开自己写的多字节编码程序,发现中文显示乱码:

需做如下修改:

   修改后需要重启:

同时需要删除原来的注册表信息:右击删除SMEE-ELEP-WH

最后结果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的示例程序,演示了如何在 Windows 7 系统中使用 I/O 控制码(IOCTL)实现驱动程序应用程序之间的通信。 驱动程序代码: ```C #include <ntddk.h> #define IOCTL_HELLO_WORLD \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS) NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) { UNREFERENCED_PARAMETER(RegistryPath); NTSTATUS status; UNICODE_STRING deviceName, symlinkName; PDEVICE_OBJECT deviceObject = NULL; RtlInitUnicodeString(&deviceName, L"\\Device\\HelloWorld"); RtlInitUnicodeString(&symlinkName, L"\\DosDevices\\HelloWorld"); status = IoCreateDevice(DriverObject, 0, &deviceName, FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN, FALSE, &deviceObject); if (!NT_SUCCESS(status)) { return status; } status = IoCreateSymbolicLink(&symlinkName, &deviceName); if (!NT_SUCCESS(status)) { IoDeleteDevice(deviceObject); return status; } DriverObject->MajorFunction[IRP_MJ_CREATE] = HelloWorldCreate; DriverObject->MajorFunction[IRP_MJ_CLOSE] = HelloWorldClose; DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = HelloWorldIOControl; return STATUS_SUCCESS; } NTSTATUS HelloWorldCreate(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) { UNREFERENCED_PARAMETER(DeviceObject); Irp->IoStatus.Status = STATUS_SUCCESS; Irp->IoStatus.Information = 0; IoCompleteRequest(Irp, IO_NO_INCREMENT); return STATUS_SUCCESS; } NTSTATUS HelloWorldClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) { UNREFERENCED_PARAMETER(DeviceObject); Irp->IoStatus.Status = STATUS_SUCCESS; Irp->IoStatus.Information = 0; IoCompleteRequest(Irp, IO_NO_INCREMENT); return STATUS_SUCCESS; } NTSTATUS HelloWorldIOControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) { UNREFERENCED_PARAMETER(DeviceObject); PIO_STACK_LOCATION irpSp = IoGetCurrentIrpStackLocation(Irp); NTSTATUS status = STATUS_SUCCESS; PVOID buffer; ULONG inputLength = irpSp->Parameters.DeviceIoControl.InputBufferLength; ULONG outputLength = irpSp->Parameters.DeviceIoControl.OutputBufferLength; ULONG code = irpSp->Parameters.DeviceIoControl.IoControlCode; switch (code) { case IOCTL_HELLO_WORLD: if (inputLength == 0 || outputLength == 0) { status = STATUS_INVALID_PARAMETER; break; } buffer = Irp->AssociatedIrp.SystemBuffer; RtlZeroMemory(buffer, outputLength); strncpy(buffer, "Hello, world!", outputLength - 1); Irp->IoStatus.Information = outputLength; break; default: status = STATUS_INVALID_DEVICE_REQUEST; break; } Irp->IoStatus.Status = status; IoCompleteRequest(Irp, IO_NO_INCREMENT); return status; } ``` 应用程序代码: ```C #include <windows.h> #include <stdio.h> #define IOCTL_HELLO_WORLD \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS) int main() { HANDLE device; DWORD bytesReturned; char buffer[256]; device = CreateFile(L"\\\\.\\HelloWorld", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (device == INVALID_HANDLE_VALUE) { printf("Failed to open device, error %d\n", GetLastError()); return 1; } if (!DeviceIoControl(device, IOCTL_HELLO_WORLD, NULL, 0, buffer, sizeof(buffer), &bytesReturned, NULL)) { printf("Failed to send IOCTL, error %d\n", GetLastError()); CloseHandle(device); return 1; } printf("%s\n", buffer); CloseHandle(device); return 0; } ``` 以上示例程序中,驱动程序会创建一个名为 "\\Device\\HelloWorld" 的设备对象,并创建一个符号链接 "\\DosDevices\\HelloWorld",应用程序可以通过符号链接访问该设备对象。应用程序会向驱动程序发送一个名为 IOCTL_HELLO_WORLD 的 IOCTL 指令,驱动程序会返回一个字符串 "Hello, world!"。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值