WIn10 Windows Event Log service Error 5: Access is denied

Error: Windows could not start the Windows Event Log service on Local Computer. Error 5: Access is denied. on WS 2008 R2

Fix:

GUI Method

Change NTFS permission of %WINDIR%\System32\WinEvt\Logs directory add Local Service and Network Service, give them FULL access.
在这里插入图片描述

Start event viewer service by running following command through elevated cmd (Run as Administrator)

net start eventlog

在这里插入图片描述

CLI Method

Run following commands sequentially from elevated cmd (Run As Administrator)

ICACLS C:\Windows\System32\winevt\logs /grant “LOCAL SERVICE:(OI)(CI)(F)” “NETWORK SERVICE:(OI)(CI)(F)”

net start eventlog

P.S. At times Windows Event Log service doesn’t start at all; in such situations, you might need to reboot the server once.

<think>好的,用户的问题是关于在NDK开发中实现fstatat64来检查/dev/input/event0。首先,我需要确认用户的具体需求。通常,访问设备文件如event0可能需要权限,用户可能是在处理输入设备相关功能,比如监控触摸事件或硬件输入。 接下来,我应该回顾fstatat64函数的使用。这个函数是用于获取文件状态,相对于目录文件描述符。在Android NDK中使用时,需要注意API版本,因为不同Android版本可能有不同的系统调用支持。用户可能需要检查文件是否存在,获取文件信息,或者验证权限。 然后,考虑路径的问题。/dev/input/event0是一个设备节点,普通应用可能没有直接访问权限,尤其是在非root设备上。用户可能遇到了权限问题,或者想确认设备的存在和属性。需要提醒用户处理权限问题,比如使用root权限,或者检查应用是否具有访问设备的权限。 还要想到替代方法。如果fstatat64不可用或有问题,是否有其他方法如open、stat等可以替代。可能需要比较不同函数的可用性和兼容性,特别是针对不同的Android版本。 另外,需要确保NDK的配置正确,比如在CMakeLists.txt中添加必要的库,处理Android版本兼容性,以及正确使用文件描述符。用户可能在编译时遇到问题,或者运行时权限错误,需要指导如何解决这些问题。 最后,考虑到用户可能是在开发需要底层输入设备访问的应用,比如游戏手柄支持或自定义输入处理,应该建议他们遵循Android的最佳实践,并考虑安全性和兼容性。可能需要检查SELinux策略,或者在应用manifest中声明权限,尽管普通应用可能无法直接访问/dev/input下的设备。 总结下来,回答需要涵盖fstatat64的使用方法,权限注意事项,替代方案,以及实际代码示例,帮助用户正确实现他们的需求,并避免常见陷阱。</think>让我们分步骤解析在 Android NDK 中使用 `fstatat64` 获取 `/dev/input/event0` 设备文件状态的完整实现: --- ### **步骤 1:理解关键系统调用** #### 1.1 `fstatat64` 函数原型 ```c int fstatat64(int dirfd, const char *pathname, struct stat64 *statbuf, int flags); ``` - **作用**:通过目录文件描述符获取文件状态(64位版本) - **参数**: - `dirfd`:目录文件描述符(特殊值 `AT_FDCWD` 表示当前工作目录) - `pathname`:相对路径 - `statbuf`:存放统计信息的结构体 - `flags`:标志位(如 `AT_SYMLINK_NOFOLLOW`) --- ### **步骤 2:NDK 实现要点** #### 2.1 头文件配置 ```c #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <linux/input.h> // 包含输入设备相关定义 ``` #### 2.2 实际调用示例 ```c struct stat64 file_stat; int result = fstatat64(AT_FDCWD, "/dev/input/event0", &file_stat, 0); ``` --- ### **步骤 3:权限处理(关键难点)** #### 3.1 SELinux 限制 ```bash avc: denied { read } for pid=xxx comm="app_process" ``` - **解决方案**: - 仅适用于 root 设备:`adb root` 后操作 - 普通应用需申请特殊权限(实际中基本无法通过常规途径获取) #### 3.2 文件描述符替代方案 ```c int fd = open("/dev/input/event0", O_RDONLY | O_NONBLOCK); if (fd >= 0) { fstat64(fd, &file_stat); // 使用常规 fstat64 close(fd); } ``` --- ### **步骤 4:完整检测流程(带错误处理)** ```c #include <android/log.h> void check_input_device() { struct stat64 st; const char* path = "/dev/input/event0"; // 尝试 fstatat64 if (fstatat64(AT_FDCWD, path, &st, 0) == 0) { __android_log_print(ANDROID_LOG_INFO, "FSTAT", "Device type: %ld, Size: %ld", (long)st.st_mode, (long)st.st_size); } else { __android_log_print(ANDROID_LOG_ERROR, "FSTAT", "Error %d: %s", errno, strerror(errno)); // 回退方案:尝试直接打开 int fd = open(path, O_RDONLY | O_NONBLOCK); if (fd >= 0) { __android_log_print(ANDROID_LOG_WARN, "FSTAT", "Open succeeded but fstatat64 failed"); close(fd); } } } ``` --- ### **步骤 5:Android.mk / CMake 配置** #### 5.1 CMakeLists.txt 关键配置 ```cmake target_link_libraries(your_library # 需要链接的库 log android ) ``` --- ### **技术细节对比** | 方法 | 优点 | 缺点 | |-----------------|--------------------------|-------------------------------| | `fstatat64` | 无需打开文件 | 需要 API Level >= 21 | | `open`+`fstat64`| 兼容性更好 | 需要处理文件描述符关闭逻辑 | | `stat` | 最简调用 | 无法处理符号链接 | --- ### **实际应用场景** 1. **输入设备监控**:检测外接键盘/游戏手柄 2. **安全审计**:验证输入设备合法性 3. **性能优化**:提前判断设备类型(如区分触摸屏和物理按键) --- ### **常见错误代码解析** | 错误码 | 含义 | 解决方案 | |--------|--------------------------|------------------------------| | EACCES | 权限不足 | 检查 SELinux 上下文/root 权限| | ENOENT | 文件不存在 | 确认设备路径正确性 | | EBADF | 错误的文件描述符 | 检查 dirfd 参数有效性 | --- ### **高级技巧** ```c // 使用 inotify 监控设备变化(需要权限) int inotify_fd = inotify_init(); inotify_add_watch(inotify_fd, "/dev/input", IN_CREATE | IN_DELETE); ``` --- 通过这种实现方式,既可以保持对现代 Android 系统的兼容性(使用 `fstatat64`),又能在低版本系统上通过传统方法降级处理。实际开发中建议结合 `access` 或 `open` 进行多层级检测。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值