/// <summary> /// Get share information /// </summary> /// <param name="info">The detection information</param> /// <returns></returns> public ShareInfo FetchShareInfo(DetectionInfo info) { logWriter.AddLog(LogLevel.Information, "===== Detect Share Info ====="); logWriter.AddLog(LogLevel.Information, "Share name: " + defaultShare); Smb2Client client = new Smb2Client(new TimeSpan(0, 0, defaultTimeoutInSeconds)); AddToClientList(client); Packet_Header header; Guid clientGuid; NEGOTIATE_Response negotiateResp; ulong messageId = 0; ulong sessionId = 0; uint treeId = 0; try { UserLogon(info, client, out messageId, out sessionId, out clientGuid, out negotiateResp); } catch (Exception ex) { logWriter.AddLog(LogLevel.Warning, "Failed", false, Detector.LogStyle.StepFailed); logWriter.AddLineToLog(LogLevel.Information); logWriter.AddLog(LogLevel.Error, string.Format("User log on failed: {0}", ex.Message)); } detectionInfo.ResetDetectResult(); #region TreeConnect TREE_CONNECT_Response treeConnectResp; string uncSharePath = Smb2Utility.GetUncPath(info.ContentServerName, defaultShare); client.TreeConnect( 1, 1, Packet_Header_Flags_Values.FLAGS_SIGNED, messageId++, sessionId, uncSharePath, out treeId, out header, out treeConnectResp); if (header.Status != Smb2Status.STATUS_SUCCESS) { LogFailedStatus("TREECONNECT", header.Status); throw new Exception("TREECONNECT failed with " + Smb2Status.GetStatusCode(header.Status)); } ShareInfo shareInfo = new ShareInfo(); shareInfo.ShareName = uncSharePath; shareInfo.shareHashGeneration = ShareHashGeneration.NotEnabled; if (treeConnectResp.ShareFlags.HasFlag(ShareFlags_Values.SHAREFLAG_ENABLE_HASH_V1)) { shareInfo.shareHashGeneration = ShareHashGeneration.V1Enabled; } if (treeConnectResp.ShareFlags.HasFlag(ShareFlags_Values.SHAREFLAG_ENABLE_HASH_V2)) { shareInfo.shareHashGeneration |= ShareHashGeneration.V2Enabled; } #endregion try { LOGOFF_Response logoffResponse; client.LogOff(1, 1, Packet_Header_Flags_Values.FLAGS_SIGNED, messageId++, sessionId, out header, out logoffResponse); if (header.Status != Smb2Status.STATUS_SUCCESS) { LogFailedStatus("LOGOFF", header.Status); } } catch (Exception e) { logWriter.AddLog(LogLevel.Information, "Exception in Cleanup: " + e.Message); } return(shareInfo); }