注意:这是对这个问题的完全重写。我之前曾将一些 ACL 问题与我正在寻找的问题混为一谈,这可能就是没有答案的原因。
我有一个 Windows 服务,它使用标准的打开/关闭/写入例程来写入日志文件(它从管道读取内容并将其填充到日志中)。每天午夜打开一个新的日志文件。系统是Windows XP Embedded。
该服务作为本地系统服务运行(用户为 NULL 的 CreateService)。
当服务最初启动时,它会创建一个日志文件并毫无问题地写入其中。此时一切正常,您可以毫无问题地重新启动服务(或计算机)。
但是,在午夜(当天更改时),该服务会创建一个新的日志文件并写入其中。有趣的是,这个新的日志文件设置了“只读”标志。这是一个问题,因为如果服务(或计算机)重新启动,服务将无法再打开文件进行写入。
以下是已经发生问题的系统的相关信息:
Directory of C:\bbbaudit
09/16/2009 12:00 AM <DIR> .
09/16/2009 12:00 AM <DIR> ..
09/16/2009 12:00 AM 437 AU090915.ADX
09/16/2009 12:00 AM 62 AU090916.ADX
attrib c:\bbbaudit\*
A C:\bbbaudit\AU090915.ADX <-- old log file (before midnight)
A R C:\bbbaudit\AU090916.ADX <-- new log file (after midnight)
cacls output:
C:\ BUILTIN\Administrators:(OI)(CI)F
NT AUTHORITY\SYSTEM:(OI)(CI)F
CREATOR OWNER:(OI)(CI)(IO)F
BUILTIN\Users:(OI)(CI)R
BUILTIN\Users:(CI)(special access:)
FILE_APPEND_DATA
BUILTIN\Users:(CI)(IO)(special access:)
FILE_WRITE_DATA
Everyone:R
C:\bbbaudit BUILTIN\Administrators:(OI)(CI)F
NT AUTHORITY\SYSTEM:(OI)(CI)F
CFN3\Administrator:F
CREATOR OWNER:(OI)(CI)(IO)F …Run Code Online (Sandbox Code Playgroud)