如何检查Windows文件索引是ON还是OFF

C中是否有API可用于检查文件索引是打开还是关闭? 代码表示赞赏。

WMI是C ++的一个难题,但本机Service API非常干净。

SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT); if(hSCManager) { SC_HANDLE hService = OpenService(hSCManager, _T("ServiceNameGoesHere"), SERVICE_QUERY_STATUS); if(hService) { // service is installed SERVICE_STATUS ServiceStatus; if(ServiceQueryStatus(hService, &ServiceStatus)) { // service is running // get current state from ServiceStatus.dwCurrentState } else if(GetLastError() == ERROR_SERVICE_NOT_ACTIVE) { // service is not running } else { // error } CloseServiceHandle(hService); hService = NULL; } else if(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST) { // service is not installed } else { // error } CloseServiceHandle(hSCManager); hSCManager = NULL; } else { // error } 

WMI可以提供这个,使用Win32_Service类。 在’C’中执行此操作非常简单,SDK仅提供C ++示例 。 这是等效的C#代码:

 using System; using System.Management; // Add reference!! class Program { public static void Main() { var searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Service WHERE Name='wsearch'"); foreach (ManagementObject queryObj in searcher.Get()) { Console.WriteLine("State = {0}", queryObj["State"]); } Console.ReadLine(); } } 

为了迂腐,C编程语言不了解Windows文件索引或其他特定于平台的function。 ISO C标准规定了一组严格的API,如字符串处理,文件处理(打开,关闭等),算术运算等,并指定和定义它们所处理的原语。 这些操作与底层平台无关。 所有这些API都由语言规范本身严格定义(参见当前参考的ISO C99标准)。

您将不得不依赖外部(语言)库来获取所需的API(API以确定文件索引是打开还是关闭)。 所以你想知道的是a)这个库是什么b)从这个库中使用什么API来从你的C程序调用,以及c)如何将这个库与你的应用程序连接起来。