KB4022726 中断 windows 对 OleDb 的搜索查询
KB4022726 breaks windows search query over OleDb
我们正在使用 windows 搜索来搜索远程共享上的文档,应用安全更新 KB4022726 后此功能中断。
我们的实现是使用 oledb 连接器在 C# 中进行 windows 搜索
Are there any workarounds besides uninstalling KB4022726?
更新:
CVE-2017-8543 可能相关。
示例程序 - 安装 KB4022726 后失败
using System;
using System.Data.OleDb;
namespace windowssearchtest
{
class Program
{
static void Main(string[] args)
{
var computer = "searchserver";
var filepath = @"documents";
var query = $@"
Select System.Itemname
FROM {computer}.systemindex
WHERE SCOPE='file:\{computer}\{filepath}'";
const string ConnectionString = "Provider=Search.CollatorDSO;Extended Properties=\"Application=Windows\"";
OleDbDataReader myDataReader = null;
OleDbConnection myOleDbConnection = new OleDbConnection(ConnectionString);
OleDbCommand myOleDbCommand = new OleDbCommand(query, myOleDbConnection);
myOleDbCommand.CommandTimeout = 180;
try
{
myOleDbConnection.Open();
myDataReader = myOleDbCommand.ExecuteReader();
if (myDataReader != null && myDataReader.HasRows)
{
Console.WriteLine($"HasRows: {myDataReader.HasRows}");
while (myDataReader.Read())
{
}
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
}
错误:
System.Data.OleDb.OleDbException (0x80004005): Uspecificeret fejl
ved System.Data.OleDb.OleDbDataReader.ProcessResults(OleDbHResult hr)
ved System.Data.OleDb.OleDbDataReader.GetRowHandles() ved
System.Data.OleDb.OleDbDataReader.ReadRowset() ved
System.Data.OleDb.OleDbDataReader.Read() ved
windowssearchtest.Program.Main(String[] args) i
C:\projects_local\windowssearchtest\windowssearchtest\Program.cs:linje
48
更新 2017-06-26
我也在本地机器上重现了这个错误 运行 win10 - 1703
Windows 搜索仍然有效,但当您到达结果集的末尾时,或者如果在 .ExecuteReader()
上为空,将会抛出错误
我们做了一个 hack 来解决这个问题,我不会推荐这个:
//pseudo code
while (Wrap(myDataReader))
<snip>
function Wrap(myDataReader)
{
try
{
return myDataReader.Read();
}
catch (ex)
{
if(ex.HResult == -2147467259) return false; //0x80004005
throw;
}
}
看来问题已在 MS 的最新可选更新中得到解决:
Win7,服务器 2008:
https://support.microsoft.com/en-us/help/4022168/windows-7-sp1-windows-server-2008-r2-sp1-update-kb4022168
Win 8.1,服务器 2012:
https://support.microsoft.com/en-us/help/4022720/windows-8-1-windows-server-2012-r2-update-kb4022720
已在我的测试服务器(2008 年、2012 年)上安装了这些更新,现在没有出现该错误!
我们正在使用 windows 搜索来搜索远程共享上的文档,应用安全更新 KB4022726 后此功能中断。
我们的实现是使用 oledb 连接器在 C# 中进行 windows 搜索
Are there any workarounds besides uninstalling KB4022726?
更新: CVE-2017-8543 可能相关。
示例程序 - 安装 KB4022726 后失败
using System;
using System.Data.OleDb;
namespace windowssearchtest
{
class Program
{
static void Main(string[] args)
{
var computer = "searchserver";
var filepath = @"documents";
var query = $@"
Select System.Itemname
FROM {computer}.systemindex
WHERE SCOPE='file:\{computer}\{filepath}'";
const string ConnectionString = "Provider=Search.CollatorDSO;Extended Properties=\"Application=Windows\"";
OleDbDataReader myDataReader = null;
OleDbConnection myOleDbConnection = new OleDbConnection(ConnectionString);
OleDbCommand myOleDbCommand = new OleDbCommand(query, myOleDbConnection);
myOleDbCommand.CommandTimeout = 180;
try
{
myOleDbConnection.Open();
myDataReader = myOleDbCommand.ExecuteReader();
if (myDataReader != null && myDataReader.HasRows)
{
Console.WriteLine($"HasRows: {myDataReader.HasRows}");
while (myDataReader.Read())
{
}
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
}
错误:
System.Data.OleDb.OleDbException (0x80004005): Uspecificeret fejl
ved System.Data.OleDb.OleDbDataReader.ProcessResults(OleDbHResult hr) ved System.Data.OleDb.OleDbDataReader.GetRowHandles() ved System.Data.OleDb.OleDbDataReader.ReadRowset() ved System.Data.OleDb.OleDbDataReader.Read() ved windowssearchtest.Program.Main(String[] args) i C:\projects_local\windowssearchtest\windowssearchtest\Program.cs:linje 48
更新 2017-06-26 我也在本地机器上重现了这个错误 运行 win10 - 1703 Windows 搜索仍然有效,但当您到达结果集的末尾时,或者如果在 .ExecuteReader()
上为空,将会抛出错误我们做了一个 hack 来解决这个问题,我不会推荐这个:
//pseudo code
while (Wrap(myDataReader))
<snip>
function Wrap(myDataReader)
{
try
{
return myDataReader.Read();
}
catch (ex)
{
if(ex.HResult == -2147467259) return false; //0x80004005
throw;
}
}
看来问题已在 MS 的最新可选更新中得到解决:
Win7,服务器 2008: https://support.microsoft.com/en-us/help/4022168/windows-7-sp1-windows-server-2008-r2-sp1-update-kb4022168
Win 8.1,服务器 2012: https://support.microsoft.com/en-us/help/4022720/windows-8-1-windows-server-2012-r2-update-kb4022720
已在我的测试服务器(2008 年、2012 年)上安装了这些更新,现在没有出现该错误!