You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ab...@apache.org on 2020/08/09 09:39:29 UTC

[nifi-minifi-cpp] branch main updated: MINIFICPP-1268 Change the warning level flag to /W3

This is an automated email from the ASF dual-hosted git repository.

aboda pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git


The following commit(s) were added to refs/heads/main by this push:
     new 08398da  MINIFICPP-1268 Change the warning level flag to /W3
08398da is described below

commit 08398da0579dd5a06d9b7af90acc3e934eb0d7af
Author: Ferenc Gerlits <fg...@gmail.com>
AuthorDate: Fri Jul 10 12:54:21 2020 +0200

    MINIFICPP-1268 Change the warning level flag to /W3
    
    Also simplify the syntax of these declarations.
    
    Fix byteSwap and unit test it
    Use the function wrapper in C++ code; fix the macro in C code.
    Fix unreferenced variable warnings
    Fix possible loss of data warnings
    Fix 'The POSIX name for this item is deprecated' warnings
    Set the character encoding to utf-8
    Set the source and executable character encoding to utf-8; this gets rid of
    many 'character X cannot be represented in the current code page' warnings
    in Expression.cpp.
    
    Fix signed/unsigned mismatch warnings
    
    Disable deprecated function warnings
    These are deprecated functions delegating to or overriding other
    deprecated functions.  They will be removed together, there is no
    need for a warning until then.
    
    Replace bitwise | with logical ||
    Add missing #includes
    Mark the narrowing conversion as narrowing
    Change the type of crc_ to uLong
    
    Signed-off-by: Arpad Boda <ab...@apache.org>
    
    This closes #848
---
 CMakeLists.txt                                     |  5 ++-
 extensions/civetweb/processors/ListenHTTP.cpp      |  2 +-
 extensions/civetweb/processors/ListenHTTP.h        |  2 +-
 extensions/civetweb/tests/ListenHTTPTests.cpp      |  6 ++--
 extensions/expression-language/Expression.cpp      | 13 ++++---
 extensions/expression-language/common/Value.h      | 12 +++----
 extensions/http-curl/client/HTTPCallback.h         |  2 +-
 extensions/http-curl/client/HTTPClient.cpp         |  8 +++--
 extensions/http-curl/client/HTTPClient.h           | 17 +++++++--
 extensions/http-curl/client/HTTPStream.h           |  2 +-
 extensions/http-curl/processors/InvokeHTTP.cpp     |  7 ++--
 extensions/http-curl/processors/InvokeHTTP.h       |  2 +-
 extensions/http-curl/sitetosite/PeersEntity.h      |  2 +-
 .../http-curl/tests/C2VerifyServeResults.cpp       |  3 +-
 extensions/http-curl/tests/CivetStream.h           |  4 +--
 extensions/http-curl/tests/HTTPHandlers.h          |  9 +++--
 .../http-curl/tests/HttpPostIntegrationTest.cpp    |  3 +-
 extensions/http-curl/tests/SiteToSiteRestTest.cpp  |  3 +-
 extensions/http-curl/tests/ThreadPoolAdjust.cpp    |  3 +-
 extensions/libarchive/ArchiveMetadata.cpp          |  8 ++---
 extensions/libarchive/BinFiles.cpp                 | 23 ++++++------
 extensions/libarchive/BinFiles.h                   | 11 +++---
 extensions/libarchive/CompressContent.h            | 24 +++++++------
 extensions/libarchive/FocusArchiveEntry.cpp        |  8 +++--
 extensions/libarchive/MergeContent.cpp             |  2 +-
 extensions/libarchive/UnfocusArchiveEntry.cpp      |  4 +--
 extensions/rocksdb-repos/ProvenanceRepository.h    |  2 +-
 extensions/rocksdb-repos/RocksDbStream.cpp         |  8 ++---
 extensions/rocksdb-repos/RocksDbStream.h           |  4 +--
 .../standard-processors/processors/ExtractText.cpp | 14 ++++----
 .../processors/GenerateFlowFile.cpp                |  4 +--
 .../standard-processors/processors/GetFile.cpp     |  4 +--
 .../standard-processors/processors/GetTCP.cpp      |  2 +-
 .../processors/LogAttribute.cpp                    |  2 +-
 .../standard-processors/processors/LogAttribute.h  |  2 +-
 .../standard-processors/processors/PutFile.cpp     | 41 +++++++++-------------
 .../tests/integration/TailFileTest.cpp             |  9 ++---
 .../tests/unit/ControllerServiceTests.cpp          |  2 +-
 .../tests/unit/GenerateFlowFileTests.cpp           |  2 +-
 .../tests/unit/ProcessorTests.cpp                  | 23 +++---------
 .../tests/unit/PutFileTests.cpp                    | 12 ++++---
 .../windows-event-log/ConsumeWindowsEventLog.cpp   |  4 +--
 .../windows-event-log/wel/WindowsEventLog.cpp      |  2 +-
 libminifi/include/FlowControlProtocol.h            |  3 +-
 libminifi/include/FlowFileRecord.h                 |  2 +-
 libminifi/include/c2/C2Agent.h                     |  2 +-
 libminifi/include/core/ClassLoader.h               |  4 ---
 libminifi/include/core/TypedValues.h               |  8 ++---
 .../include/core/repository/AtomicRepoEntries.h    |  2 +-
 .../include/core/repository/VolatileRepository.h   |  6 ++--
 .../include/core/state/nodes/DeviceInformation.h   |  3 --
 libminifi/include/io/AtomicEntryStream.h           |  4 +--
 libminifi/include/io/BaseStream.h                  |  2 +-
 libminifi/include/io/CRCStream.h                   | 14 ++++----
 libminifi/include/io/DataStream.h                  |  8 +++--
 libminifi/include/io/DescriptorStream.h            |  2 +-
 libminifi/include/io/FileStream.h                  |  2 +-
 libminifi/include/io/NonConvertingStream.h         |  2 +-
 libminifi/include/io/Serializable.h                |  5 +--
 libminifi/include/io/tls/SecureDescriptorStream.h  |  2 +-
 libminifi/include/sitetosite/SiteToSite.h          |  2 --
 libminifi/include/sitetosite/SiteToSiteClient.h    |  8 ++---
 libminifi/include/utils/ByteArrayCallback.h        |  2 +-
 libminifi/include/utils/HTTPClient.h               | 21 ++++++++---
 libminifi/include/utils/ThreadPool.h               |  2 +-
 libminifi/include/utils/file/FileManager.h         |  2 +-
 libminifi/include/utils/file/FileUtils.h           | 16 +++++++++
 libminifi/src/FlowControlProtocol.cpp              | 30 ++++++++--------
 libminifi/src/RemoteProcessorGroupPort.cpp         |  2 +-
 libminifi/src/c2/C2Agent.cpp                       | 40 ++++++++++-----------
 libminifi/src/c2/ControllerSocketProtocol.cpp      |  6 ++--
 .../src/controllers/NetworkPrioritizerService.cpp  |  8 ++---
 libminifi/src/core/ConfigurationFactory.cpp        |  2 +-
 libminifi/src/core/ProcessGroup.cpp                |  2 +-
 libminifi/src/core/ProcessSession.cpp              |  7 +++-
 libminifi/src/core/ProcessSessionReadCallback.cpp  |  3 +-
 libminifi/src/core/RepositoryFactory.cpp           |  4 +--
 libminifi/src/core/logging/LoggerConfiguration.cpp | 10 +++---
 libminifi/src/core/yaml/YamlConfiguration.cpp      |  6 ++--
 libminifi/src/io/ClientSocket.cpp                  |  9 ++---
 libminifi/src/io/DescriptorStream.cpp              | 14 +++++++-
 libminifi/src/io/FileStream.cpp                    | 14 ++++----
 libminifi/src/io/ServerSocket.cpp                  |  3 +-
 libminifi/src/io/tls/SecureDescriptorStream.cpp    |  6 +++-
 libminifi/src/sitetosite/Peer.cpp                  |  2 +-
 libminifi/src/sitetosite/RawSocketProtocol.cpp     |  2 +-
 libminifi/src/sitetosite/SiteToSiteClient.cpp      |  5 +--
 libminifi/src/utils/file/FileUtils.cpp             |  4 +--
 libminifi/test/TestBase.cpp                        |  8 ++---
 .../test/archive-tests/CompressContentTests.cpp    | 28 +++++++--------
 libminifi/test/archive-tests/FocusArchiveTests.cpp |  7 ++--
 libminifi/test/archive-tests/MergeFileTests.cpp    | 26 +++++++-------
 libminifi/test/archive-tests/util/ArchiveTests.cpp |  2 +-
 .../PersistableKeyValueStoreServiceTest.cpp        |  5 ++-
 .../rocksdb-tests/DBProvenanceRepositoryTests.cpp  |  6 ++--
 libminifi/test/unit/FileStreamTests.cpp            | 14 ++++----
 libminifi/test/unit/SerializationTests.cpp         | 16 +++++++++
 libminifi/test/unit/Site2SiteTests.cpp             |  2 +-
 nanofi/include/core/cstream.h                      |  4 +--
 nanofi/include/core/string_utils.h                 |  2 +-
 nanofi/include/sitetosite/CSiteToSite.h            |  9 ++---
 nanofi/src/api/nanofi.cpp                          | 18 +++++-----
 nanofi/src/core/cstream.c                          | 25 +++++++------
 nanofi/src/core/cuuid.c                            |  1 +
 nanofi/src/core/string_utils.c                     |  6 ++--
 nanofi/src/sitetosite/CRawSocketProtocol.c         | 15 ++++----
 106 files changed, 447 insertions(+), 372 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1e7da8f..9edc562 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -108,9 +108,8 @@ endif()
 # Enable usage of the VERSION specifier
 include(CheckCXXCompilerFlag)
 if (WIN32)
-	add_definitions(-DWIN32_LEAN_AND_MEAN)
-	add_definitions(-D_CRT_SECURE_NO_WARNINGS)
-	add_compile_options("/W1")
+    add_compile_definitions(WIN32_LEAN_AND_MEAN _CRT_SECURE_NO_WARNINGS)
+    add_compile_options(/W3 /utf-8)
   if ((MSVC_VERSION GREATER "1900") OR (MSVC_VERSION EQUAL "1900"))
     CHECK_CXX_COMPILER_FLAG("/std:c++14" _cpp_latest_flag_supported)
     if (_cpp_latest_flag_supported)
diff --git a/extensions/civetweb/processors/ListenHTTP.cpp b/extensions/civetweb/processors/ListenHTTP.cpp
index be66960..cb21f41 100644
--- a/extensions/civetweb/processors/ListenHTTP.cpp
+++ b/extensions/civetweb/processors/ListenHTTP.cpp
@@ -467,7 +467,7 @@ int64_t ListenHTTP::WriteCallback::process(std::shared_ptr<io::BaseStream> strea
     }
 
     // Transfer buffer data to the output stream
-    stream->write(&buf[0], rlen);
+    stream->write(&buf[0], gsl::narrow<int>(rlen));
 
     nlen += rlen;
   }
diff --git a/extensions/civetweb/processors/ListenHTTP.h b/extensions/civetweb/processors/ListenHTTP.h
index 847a536..ce9601e 100644
--- a/extensions/civetweb/processors/ListenHTTP.h
+++ b/extensions/civetweb/processors/ListenHTTP.h
@@ -139,7 +139,7 @@ class ListenHTTP : public core::Processor {
     int64_t process(std::shared_ptr<io::BaseStream> stream) {
       out_str_->resize(stream->getSize());
       uint64_t num_read = stream->readData(reinterpret_cast<uint8_t *>(&(*out_str_)[0]),
-                                           static_cast<int>(stream->getSize()));
+                                           gsl::narrow<int>(stream->getSize()));
 
       if (num_read != stream->getSize()) {
         throw std::runtime_error("GraphReadCallback failed to fully read flow file input stream");
diff --git a/extensions/civetweb/tests/ListenHTTPTests.cpp b/extensions/civetweb/tests/ListenHTTPTests.cpp
index b628139..89699be 100644
--- a/extensions/civetweb/tests/ListenHTTPTests.cpp
+++ b/extensions/civetweb/tests/ListenHTTPTests.cpp
@@ -35,8 +35,7 @@
 
 class ListenHTTPTestsFixture {
  public:
-  ListenHTTPTestsFixture()
-   : tmp_dir_format(strdup("/tmp/gt.XXXXXX")) {
+  ListenHTTPTestsFixture() {
     LogTestController::getInstance().setDebug<TestPlan>();
     LogTestController::getInstance().setDebug<minifi::FlowController>();
     LogTestController::getInstance().setDebug<minifi::SchedulingAgent>();
@@ -50,6 +49,7 @@ class ListenHTTPTestsFixture {
     LogTestController::getInstance().setDebug<minifi::controllers::SSLContextService>();
 
     // Create temporary directories
+    char tmp_dir_format[] = "/tmp/gt.XXXXXX";
     tmp_dir = testController.createTempDirectory(tmp_dir_format);
     REQUIRE(!tmp_dir.empty());
 
@@ -92,7 +92,6 @@ class ListenHTTPTestsFixture {
   }
 
   virtual ~ListenHTTPTestsFixture() {
-    free(tmp_dir_format);
     LogTestController::getInstance().reset();
   }
 
@@ -169,7 +168,6 @@ class ListenHTTPTestsFixture {
   }
 
  protected:
-  char* tmp_dir_format;
   std::string tmp_dir;
   TestController testController;
   std::shared_ptr<TestPlan> plan;
diff --git a/extensions/expression-language/Expression.cpp b/extensions/expression-language/Expression.cpp
index 2ddc68d..d1d4c56 100644
--- a/extensions/expression-language/Expression.cpp
+++ b/extensions/expression-language/Expression.cpp
@@ -194,9 +194,12 @@ Value expr_toLower(const std::vector<Value> &args) {
 
 Value expr_substring(const std::vector<Value> &args) {
   if (args.size() < 3) {
-    return Value(args[0].asString().substr(args[1].asUnsignedLong()));
+    size_t offset = gsl::narrow<size_t>(args[1].asUnsignedLong());
+    return Value(args[0].asString().substr(offset));
   } else {
-    return Value(args[0].asString().substr(args[1].asUnsignedLong(), args[2].asUnsignedLong()));
+    size_t offset = gsl::narrow<size_t>(args[1].asUnsignedLong());
+    size_t count = gsl::narrow<size_t>(args[2].asUnsignedLong());
+    return Value(args[0].asString().substr(offset, count));
   }
 }
 
@@ -269,7 +272,7 @@ Value expr_getDelimitedField(const std::vector<Value> &args) {
   std::string result;
   result.resize(1024);
 
-  for (uint64_t parse_pos = 0; parse_pos < subject.length(); parse_pos++) {
+  for (size_t parse_pos = 0; parse_pos < subject.length(); parse_pos++) {
     char cur_ch = subject[parse_pos];
 
     if (cur_ch == escape_ch) {
@@ -808,7 +811,7 @@ Value expr_binary_op(const std::vector<Value> &args, long double (*ldop)(long do
     } else {
       return Value(ldop(args[0].asLongDouble(), args[1].asLongDouble()));
     }
-  } catch (const std::exception &e) {
+  } catch (const std::exception &) {
     return Value();
   }
 }
@@ -873,7 +876,7 @@ Value expr_toRadix(const std::vector<Value> &args) {
 }
 
 Value expr_fromRadix(const std::vector<Value> &args) {
-  auto radix = args[1].asSignedLong();
+  int radix = gsl::narrow<int>(args[1].asSignedLong());
 
   if (radix < 2 || radix > 36) {
     throw std::runtime_error("Cannot perform conversion due to invalid radix");
diff --git a/extensions/expression-language/common/Value.h b/extensions/expression-language/common/Value.h
index 26918c7..bc29f68 100644
--- a/extensions/expression-language/common/Value.h
+++ b/extensions/expression-language/common/Value.h
@@ -185,9 +185,9 @@ class Value {
     } else if (is_signed_long_) {
       return signed_long_val_;
     } else if (is_long_double_) {
-      return long_double_val_;
+      return static_cast<uint64_t >(long_double_val_);
     } else {
-      return 0.0;
+      return 0;
     }
   }
 
@@ -199,17 +199,17 @@ class Value {
     } else if (is_string_) {
       return string_val_.empty() ? 0 : std::stol(string_val_);
     } else if (is_long_double_) {
-      return long_double_val_;
+      return static_cast<int64_t >(long_double_val_);
     } else {
-      return 0.0;
+      return 0;
     }
   }
 
   long double asLongDouble() const {
     if (is_signed_long_) {
-      return signed_long_val_;
+      return static_cast<long double>(signed_long_val_);
     } else if (is_unsigned_long_) {
-      return unsigned_long_val_;
+      return static_cast<long double>(unsigned_long_val_);
     } else if (is_long_double_) {
       return long_double_val_;
     } else if (is_string_) {
diff --git a/extensions/http-curl/client/HTTPCallback.h b/extensions/http-curl/client/HTTPCallback.h
index 12d4b92..b124bc6 100644
--- a/extensions/http-curl/client/HTTPCallback.h
+++ b/extensions/http-curl/client/HTTPCallback.h
@@ -83,7 +83,7 @@ class HttpStreamingCallback : public ByteInputCallBack {
 
     if (stream->getSize() > 0) {
       vec.resize(stream->getSize());
-      stream->readData(reinterpret_cast<uint8_t*>(vec.data()), stream->getSize());
+      stream->readData(reinterpret_cast<uint8_t*>(vec.data()), gsl::narrow<int>(stream->getSize()));
     }
 
     return processInner(std::move(vec));
diff --git a/extensions/http-curl/client/HTTPClient.cpp b/extensions/http-curl/client/HTTPClient.cpp
index 518da4a..9c36693 100644
--- a/extensions/http-curl/client/HTTPClient.cpp
+++ b/extensions/http-curl/client/HTTPClient.cpp
@@ -288,7 +288,9 @@ bool HTTPClient::submit() {
   if (callback == nullptr) {
     read_callback_.close();
   }
+  long http_code;
   curl_easy_getinfo(http_session_, CURLINFO_RESPONSE_CODE, &http_code);
+  http_code_ = http_code;
   curl_easy_getinfo(http_session_, CURLINFO_CONTENT_TYPE, &content_type_str_);
   if (res == CURLE_OPERATION_TIMEDOUT) {
     logger_->log_error("HTTP operation timed out, with absolute timeout %dms\n", absoluteTimeout);
@@ -306,8 +308,8 @@ CURLcode HTTPClient::getResponseResult() {
   return res;
 }
 
-int64_t &HTTPClient::getResponseCode() {
-  return http_code;
+int64_t HTTPClient::getResponseCode() const {
+  return http_code_;
 }
 
 const char *HTTPClient::getContentType() {
@@ -367,7 +369,7 @@ bool HTTPClient::matches(const std::string &value, const std::string &sregex) {
   try {
     utils::Regex rgx(sregex);
     return rgx.match(value);
-  } catch (const Exception &e) {
+  } catch (const Exception &) {
     return false;
   }
 }
diff --git a/extensions/http-curl/client/HTTPClient.h b/extensions/http-curl/client/HTTPClient.h
index 8cc38ab..3b1941a 100644
--- a/extensions/http-curl/client/HTTPClient.h
+++ b/extensions/http-curl/client/HTTPClient.h
@@ -15,6 +15,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
+// Visual Studio 2017 warns when overriding a deprecated function, even if
+// the override is also deprecated.  Note that we need to put this #pragma
+// here, because it doesn't work inside the #ifndef
+#ifdef WIN32
+#pragma warning(push)
+#pragma warning(disable: 4996)
+#endif
+
 #ifndef EXTENSIONS_HTTP_CURL_CLIENT_HTTPCLIENT_H_
 #define EXTENSIONS_HTTP_CURL_CLIENT_HTTPCLIENT_H_
 
@@ -117,7 +126,7 @@ class HTTPClient : public BaseHTTPClient, public core::Connectable {
 
   CURLcode getResponseResult();
 
-  int64_t &getResponseCode() override;
+  int64_t getResponseCode() const override;
 
   const char *getContentType() override;
 
@@ -269,7 +278,7 @@ class HTTPClient : public BaseHTTPClient, public core::Connectable {
   struct curl_slist *headers_{nullptr};
   HTTPReadCallback *callback{nullptr};
   HTTPUploadCallback *write_callback_{nullptr};
-  int64_t http_code{0};
+  int64_t http_code_{0};
   ByteOutputCallback read_callback_{INT_MAX};
   utils::HTTPHeaderResponse header_response_{-1};
 
@@ -293,3 +302,7 @@ class HTTPClient : public BaseHTTPClient, public core::Connectable {
 }  // namespace org
 
 #endif  // EXTENSIONS_HTTP_CURL_CLIENT_HTTPCLIENT_H_
+
+#ifdef WIN32
+#pragma warning(pop)
+#endif
diff --git a/extensions/http-curl/client/HTTPStream.h b/extensions/http-curl/client/HTTPStream.h
index ce6796b..9ca4821 100644
--- a/extensions/http-curl/client/HTTPStream.h
+++ b/extensions/http-curl/client/HTTPStream.h
@@ -79,7 +79,7 @@ class HttpStream : public io::BaseStream {
    */
   virtual void seek(uint64_t offset) override;
 
-  const uint64_t getSize() const override {
+  const size_t getSize() const override {
     return written;
   }
 
diff --git a/extensions/http-curl/processors/InvokeHTTP.cpp b/extensions/http-curl/processors/InvokeHTTP.cpp
index 78d9db3..e696569 100644
--- a/extensions/http-curl/processors/InvokeHTTP.cpp
+++ b/extensions/http-curl/processors/InvokeHTTP.cpp
@@ -26,6 +26,7 @@
 #include <memory>
 #include <algorithm>
 #include <cctype>
+#include <cinttypes>
 #include <cstdint>
 #include <cstring>
 #include <iostream>
@@ -345,10 +346,10 @@ void InvokeHTTP::onTrigger(const std::shared_ptr<core::ProcessContext> &context,
     flowFile->addAttribute(REQUEST_URL, url_);
     flowFile->addAttribute(TRANSACTION_ID, tx_id);
 
-    bool isSuccess = ((int32_t) (http_code / 100)) == 2;
+    bool isSuccess = (static_cast<int32_t>(http_code / 100) == 2);
     bool output_body_to_content = isSuccess && !putToAttribute;
 
-    logger_->log_debug("isSuccess: %d, response code %d", isSuccess, http_code);
+    logger_->log_debug("isSuccess: %d, response code %" PRId64, isSuccess, http_code);
     std::shared_ptr<FlowFileRecord> response_flow = nullptr;
 
     if (output_body_to_content) {
@@ -378,7 +379,7 @@ void InvokeHTTP::onTrigger(const std::shared_ptr<core::ProcessContext> &context,
 }
 
 void InvokeHTTP::route(std::shared_ptr<FlowFileRecord> &request, std::shared_ptr<FlowFileRecord> &response, const std::shared_ptr<core::ProcessSession> &session,
-                       const std::shared_ptr<core::ProcessContext> &context, bool isSuccess, int statusCode) {
+                       const std::shared_ptr<core::ProcessContext> &context, bool isSuccess, int64_t statusCode) {
   // check if we should yield the processor
   if (!isSuccess && request == nullptr) {
     context->yield();
diff --git a/extensions/http-curl/processors/InvokeHTTP.h b/extensions/http-curl/processors/InvokeHTTP.h
index 15f0511..b0bb770 100644
--- a/extensions/http-curl/processors/InvokeHTTP.h
+++ b/extensions/http-curl/processors/InvokeHTTP.h
@@ -123,7 +123,7 @@ class InvokeHTTP : public core::Processor {
    * @param statuscode http response code.
    */
   void route(std::shared_ptr<FlowFileRecord> &request, std::shared_ptr<FlowFileRecord> &response, const std::shared_ptr<core::ProcessSession> &session,
-             const std::shared_ptr<core::ProcessContext> &context, bool isSuccess, int statusCode);
+             const std::shared_ptr<core::ProcessContext> &context, bool isSuccess, int64_t statusCode);
   /**
    * Determine if we should emit a new flowfile based on our activity
    * @param method method type
diff --git a/extensions/http-curl/sitetosite/PeersEntity.h b/extensions/http-curl/sitetosite/PeersEntity.h
index a43df8c..b5c651b 100644
--- a/extensions/http-curl/sitetosite/PeersEntity.h
+++ b/extensions/http-curl/sitetosite/PeersEntity.h
@@ -88,7 +88,7 @@ class PeersEntity {
 
           if (peer.HasMember("flowFileCount")) {
             if (peer["flowFileCount"].IsNumber()) {
-              flowFileCount = peer["flowFileCount"].GetInt64();
+              flowFileCount = gsl::narrow<int>(peer["flowFileCount"].GetInt64());
             } else {
               logger->log_debug("Could not parse flowFileCount, so we're going to continue without it");
             }
diff --git a/extensions/http-curl/tests/C2VerifyServeResults.cpp b/extensions/http-curl/tests/C2VerifyServeResults.cpp
index e814e7c..1673698 100644
--- a/extensions/http-curl/tests/C2VerifyServeResults.cpp
+++ b/extensions/http-curl/tests/C2VerifyServeResults.cpp
@@ -17,6 +17,7 @@
  */
 
 #undef NDEBUG
+#include <cstdio>
 #include <memory>
 #include <string>
 #include <sstream>
@@ -46,7 +47,7 @@ public:
   }
 
   void cleanup() override {
-    unlink(ss.str().c_str());
+    std::remove(ss.str().c_str());
   }
 
   void runAssertions() override {
diff --git a/extensions/http-curl/tests/CivetStream.h b/extensions/http-curl/tests/CivetStream.h
index 4503ec3..d096112 100644
--- a/extensions/http-curl/tests/CivetStream.h
+++ b/extensions/http-curl/tests/CivetStream.h
@@ -51,7 +51,7 @@ class CivetStream : public io::BaseStream {
    */
   void seek(uint64_t offset) override { }
 
-  const uint64_t getSize() const override {
+  const size_t getSize() const override {
     return BaseStream::readBuffer;
   }
 
@@ -66,7 +66,7 @@ class CivetStream : public io::BaseStream {
       throw minifi::Exception{ExceptionType::GENERAL_EXCEPTION, "negative buflen"};
     }
 
-    if (buf.size() < buflen) {
+    if (buf.size() < gsl::narrow<size_t>(buflen)) {
       buf.resize(buflen);
     }
     int ret = readData(buf.data(), buflen);
diff --git a/extensions/http-curl/tests/HTTPHandlers.h b/extensions/http-curl/tests/HTTPHandlers.h
index 3fd3f14..3586b9a 100644
--- a/extensions/http-curl/tests/HTTPHandlers.h
+++ b/extensions/http-curl/tests/HTTPHandlers.h
@@ -219,7 +219,7 @@ class FlowFileResponder : public ServerAwareHandler {
 
       auto flow = std::make_shared<FlowObj>();
 
-      for (int i = 0; i < num_attributes; i++) {
+      for (uint32_t i = 0; i < num_attributes; i++) {
         std::string name, value;
         read = stream.readUTF(name, true);
         if(!isServerRunning())return false;
@@ -235,10 +235,10 @@ class FlowFileResponder : public ServerAwareHandler {
       assert(read > 0); total_size += read;
 
       total_size += length;
-      flow->data.resize(length);
+      flow->data.resize(gsl::narrow<size_t>(length));
       flow->total_size = total_size;
 
-      read = stream.readData(flow->data.data(), length);
+      read = stream.readData(flow->data.data(), gsl::narrow<int>(length));
       if(!isServerRunning())return false;
       assert(read == length);
 
@@ -267,7 +267,6 @@ class FlowFileResponder : public ServerAwareHandler {
 
     if (flow_files_feed_->size_approx() > 0) {
       std::shared_ptr<FlowObj> flowobj;
-      uint8_t buf[1];
       std::vector<std::shared_ptr<FlowObj>> flows;
       uint64_t total = 0;
 
@@ -292,7 +291,7 @@ class FlowFileResponder : public ServerAwareHandler {
         }
         uint64_t length = flow->data.size();
         stream.write(length);
-        stream.writeData(flow->data.data(), length);
+        stream.writeData(flow->data.data(), gsl::narrow<int>(length));
       }
     } else {
       mg_printf(conn, "HTTP/1.1 200 OK\r\nConnection: "
diff --git a/extensions/http-curl/tests/HttpPostIntegrationTest.cpp b/extensions/http-curl/tests/HttpPostIntegrationTest.cpp
index b36f811..2ca3c2b 100644
--- a/extensions/http-curl/tests/HttpPostIntegrationTest.cpp
+++ b/extensions/http-curl/tests/HttpPostIntegrationTest.cpp
@@ -18,6 +18,7 @@
 
 #undef NDEBUG
 #include <cassert>
+#include <cstdio>
 #include <string>
 #include <iostream>
 #include "InvokeHTTP.h"
@@ -62,7 +63,7 @@ public:
   }
 
   void cleanup() override {
-    unlink(ss.str().c_str());
+    std::remove(ss.str().c_str());
   }
 
   void runAssertions() override {
diff --git a/extensions/http-curl/tests/SiteToSiteRestTest.cpp b/extensions/http-curl/tests/SiteToSiteRestTest.cpp
index cfa09d7..cd4a124 100644
--- a/extensions/http-curl/tests/SiteToSiteRestTest.cpp
+++ b/extensions/http-curl/tests/SiteToSiteRestTest.cpp
@@ -19,6 +19,7 @@
 #define CURLOPT_SSL_VERIFYPEER_DISABLE 1
 #undef NDEBUG
 #include <cassert>
+#include <cstdio>
 #include <string>
 #include <iostream>
 #include "InvokeHTTP.h"
@@ -83,7 +84,7 @@ public:
   }
 
   void cleanup() override {
-    unlink(ss.str().c_str());
+    std::remove(ss.str().c_str());
   }
 
   void runAssertions() override {
diff --git a/extensions/http-curl/tests/ThreadPoolAdjust.cpp b/extensions/http-curl/tests/ThreadPoolAdjust.cpp
index fffbf10..4d484f3 100644
--- a/extensions/http-curl/tests/ThreadPoolAdjust.cpp
+++ b/extensions/http-curl/tests/ThreadPoolAdjust.cpp
@@ -18,6 +18,7 @@
 
 #undef NDEBUG
 #include <cassert>
+#include <cstdio>
 #include <string>
 #include <iostream>
 #include "InvokeHTTP.h"
@@ -61,7 +62,7 @@ class HttpTestHarness : public IntegrationBase {
   }
 
   void cleanup() override {
-    unlink(ss.str().c_str());
+    std::remove(ss.str().c_str());
   }
 
   void runAssertions() override {
diff --git a/extensions/libarchive/ArchiveMetadata.cpp b/extensions/libarchive/ArchiveMetadata.cpp
index 7503ab6..eea31a8 100644
--- a/extensions/libarchive/ArchiveMetadata.cpp
+++ b/extensions/libarchive/ArchiveMetadata.cpp
@@ -60,10 +60,10 @@ rapidjson::Value ArchiveEntryMetadata::toJson(rapidjson::Document::AllocatorType
 
 void ArchiveEntryMetadata::loadJson(const rapidjson::Value& entryVal) {
     entryName.assign(entryVal["entry_name"].GetString());
-    entryType = entryVal["entry_type"].GetUint64();
-    entryPerm = entryVal["entry_perm"].GetUint64();
+    entryType = gsl::narrow<mode_t>(entryVal["entry_type"].GetUint64());
+    entryPerm = gsl::narrow<mode_t>(entryVal["entry_perm"].GetUint64());
     entrySize = entryVal["entry_size"].GetUint64();
-    entryUID = entryVal["entry_uid"].GetUint64();
+    entryUID = gsl::narrow<uid_t>(entryVal["entry_uid"].GetUint64());
     entryGID = entryVal["entry_gid"].GetUint64();
     entryMTime = entryVal["entry_mtime"].GetUint64();
     entryMTimeNsec = entryVal["entry_mtime_nsec"].GetInt64();
@@ -138,7 +138,7 @@ void ArchiveMetadata::loadJson(const rapidjson::Value& metadataDoc) {
         archiveName.assign(itr->value.GetString());
 
     archiveFormatName.assign(metadataDoc["archive_format_name"].GetString());
-    archiveFormat = metadataDoc["archive_format"].GetUint64();
+    archiveFormat = gsl::narrow<int>(metadataDoc["archive_format"].GetUint64());
 
     focusedEntry = metadataDoc["focused_entry"].GetString();
   
diff --git a/extensions/libarchive/BinFiles.cpp b/extensions/libarchive/BinFiles.cpp
index a7881ba..4de844c 100644
--- a/extensions/libarchive/BinFiles.cpp
+++ b/extensions/libarchive/BinFiles.cpp
@@ -75,15 +75,16 @@ void BinFiles::initialize() {
 
 void BinFiles::onSchedule(core::ProcessContext *context, core::ProcessSessionFactory *sessionFactory) {
   std::string value;
-  int64_t valInt;
-  if (context->getProperty(MinSize.getName(), value) && !value.empty() && core::Property::StringToInt(value, valInt)) {
-    this->binManager_.setMinSize(valInt);
-    logger_->log_debug("BinFiles: MinSize [%d]", valInt);
+  int64_t valInt64;
+  int valInt;
+  if (context->getProperty(MinSize.getName(), value) && !value.empty() && core::Property::StringToInt(value, valInt64)) {
+    this->binManager_.setMinSize(valInt64);
+    logger_->log_debug("BinFiles: MinSize [%" PRId64 "]", valInt64);
   }
   value = "";
-  if (context->getProperty(MaxSize.getName(), value) && !value.empty() && core::Property::StringToInt(value, valInt)) {
-    this->binManager_.setMaxSize(valInt);
-    logger_->log_debug("BinFiles: MaxSize [%d]", valInt);
+  if (context->getProperty(MaxSize.getName(), value) && !value.empty() && core::Property::StringToInt(value, valInt64)) {
+    this->binManager_.setMaxSize(valInt64);
+    logger_->log_debug("BinFiles: MaxSize [%" PRId64 "]", valInt64);
   }
   value = "";
   if (context->getProperty(MinEntries.getName(), value) && !value.empty() && core::Property::StringToInt(value, valInt)) {
@@ -97,15 +98,15 @@ void BinFiles::onSchedule(core::ProcessContext *context, core::ProcessSessionFac
   }
   value = "";
   if (context->getProperty(MaxBinCount.getName(), value) && !value.empty() && core::Property::StringToInt(value, valInt)) {
-    maxBinCount_ = static_cast<int> (valInt);
+    maxBinCount_ = valInt;
     logger_->log_debug("BinFiles: MaxBinCount [%d]", valInt);
   }
   value = "";
   if (context->getProperty(MaxBinAge.getName(), value) && !value.empty()) {
     core::TimeUnit unit;
-    if (core::Property::StringToTime(value, valInt, unit) && core::Property::ConvertTimeUnitToMS(valInt, unit, valInt)) {
-      this->binManager_.setBinAge(valInt);
-      logger_->log_debug("BinFiles: MaxBinAge [%d]", valInt);
+    if (core::Property::StringToTime(value, valInt64, unit) && core::Property::ConvertTimeUnitToMS(valInt64, unit, valInt64)) {
+      this->binManager_.setBinAge(valInt64);
+      logger_->log_debug("BinFiles: MaxBinAge [%" PRId64 "]", valInt64);
     }
   }
 }
diff --git a/extensions/libarchive/BinFiles.h b/extensions/libarchive/BinFiles.h
index f8b89ea..c52bc34 100644
--- a/extensions/libarchive/BinFiles.h
+++ b/extensions/libarchive/BinFiles.h
@@ -20,6 +20,7 @@
 #ifndef __BIN_FILES_H__
 #define __BIN_FILES_H__
 
+#include <cinttypes>
 #include <climits>
 #include <deque>
 #include <map>
@@ -44,7 +45,7 @@ class Bin {
   /*!
    * Create a new Bin. Note: this object is not thread safe
    */
-  explicit Bin(const uint64_t &minSize, const uint64_t &maxSize, const int &minEntries, const int & maxEntries, const std::string &fileCount, const std::string &groupId)
+  explicit Bin(const uint64_t &minSize, const uint64_t &maxSize, const size_t &minEntries, const size_t & maxEntries, const std::string &fileCount, const std::string &groupId)
       : minSize_(minSize),
         maxSize_(maxSize),
         maxEntries_(maxEntries),
@@ -91,7 +92,7 @@ class Bin {
       if (flow->getAttribute(fileCount_, value)) {
         try {
           // for defrag case using the identification
-          int count = std::stoi(value);
+          size_t count = std::stoul(value);
           maxEntries_ = count;
           minEntries_ = count;
         } catch (...) {
@@ -105,7 +106,7 @@ class Bin {
 
     queue_.push_back(flow);
     queued_data_size_ += flow->getSize();
-    logger_->log_debug("Bin %s for group %s offer size %d byte %d min_entry %d max_entry %d", uuid_str_, groupId_, queue_.size(), queued_data_size_, minEntries_, maxEntries_);
+    logger_->log_debug("Bin %s for group %s offer size %zu byte %" PRIu64 " min_entry %zu max_entry %zu", uuid_str_, groupId_, queue_.size(), queued_data_size_, minEntries_, maxEntries_);
 
     return true;
   }
@@ -129,8 +130,8 @@ class Bin {
  private:
   uint64_t minSize_;
   uint64_t maxSize_;
-  int maxEntries_;
-  int minEntries_;
+  size_t maxEntries_;
+  size_t minEntries_;
   // Queued data size
   uint64_t queued_data_size_;
   // Queue for the Flow File
diff --git a/extensions/libarchive/CompressContent.h b/extensions/libarchive/CompressContent.h
index b635357..1a92dc8 100644
--- a/extensions/libarchive/CompressContent.h
+++ b/extensions/libarchive/CompressContent.h
@@ -20,6 +20,8 @@
 #ifndef __COMPRESS_CONTENT_H__
 #define __COMPRESS_CONTENT_H__
 
+#include <cinttypes>
+
 #include "archive_entry.h"
 #include "archive.h"
 
@@ -101,7 +103,7 @@ public:
           return -1;
         }
         if (ret > 0) {
-          ret = archive_write_data(arch_, buffer, ret);
+          ret = archive_write_data(arch_, buffer, gsl::narrow<size_t>(ret));
           if (ret < 0) {
             logger_->log_error("Compress Content archive error %s", archive_error_string(arch_));
             status_ = -1;
@@ -147,7 +149,7 @@ public:
   // Nest Callback Class for write stream
   class WriteCallback: public OutputStreamCallback {
   public:
-    WriteCallback(std::string &compress_mode, int64_t compress_level, std::string &compress_format,
+    WriteCallback(std::string &compress_mode, int compress_level, std::string &compress_format,
         std::shared_ptr<core::FlowFile> &flow, const std::shared_ptr<core::ProcessSession> &session) :
         compress_mode_(compress_mode), compress_level_(compress_level), compress_format_(compress_format),
         flow_(flow), session_(session),
@@ -160,7 +162,7 @@ public:
     ~WriteCallback() = default;
 
     std::string compress_mode_;
-    int64_t compress_level_;
+    int compress_level_;
     std::string compress_format_;
     std::shared_ptr<core::FlowFile> flow_;
     std::shared_ptr<core::ProcessSession> session_;
@@ -183,7 +185,7 @@ public:
       callback->session_->read(callback->flow_, &callback->readDecompressCb_);
       if (callback->readDecompressCb_.read_size_ >= 0) {
         *buff = callback->readDecompressCb_.buffer_;
-        return callback->readDecompressCb_.read_size_;
+        return gsl::narrow<la_ssize_t>(callback->readDecompressCb_.read_size_);
       } else {
         archive_set_error(arch, EIO, "Error reading flowfile");
         return -1;
@@ -228,7 +230,7 @@ public:
             return -1;
           }
           std::string option;
-          option = "gzip:compression-level=" + std::to_string((int) compress_level_);
+          option = "gzip:compression-level=" + std::to_string(compress_level_);
           r = archive_write_set_options(arch, option.c_str());
           if (r != ARCHIVE_OK) {
             archive_write_log_error_cleanup(arch);
@@ -316,8 +318,8 @@ public:
           archive_read_log_error_cleanup(arch);
           return -1;
         }
-        int entry_size = archive_entry_size(entry);
-        logger_->log_debug("Decompress Content archive entry size %d", entry_size);
+        int64_t entry_size = archive_entry_size(entry);
+        logger_->log_debug("Decompress Content archive entry size %" PRId64, entry_size);
         size_ = 0;
         while (size_ < entry_size) {
           char buffer[8192];
@@ -344,7 +346,7 @@ public:
 
   class GzipWriteCallback : public OutputStreamCallback {
    public:
-    GzipWriteCallback(std::string compress_mode, int64_t compress_level, std::shared_ptr<core::FlowFile> flow, std::shared_ptr<core::ProcessSession> session)
+    GzipWriteCallback(std::string compress_mode, int compress_level, std::shared_ptr<core::FlowFile> flow, std::shared_ptr<core::ProcessSession> session)
       : logger_(logging::LoggerFactory<CompressContent>::getLogger())
       , compress_mode_(std::move(compress_mode))
       , compress_level_(compress_level)
@@ -355,7 +357,7 @@ public:
 
     std::shared_ptr<logging::Logger> logger_;
     std::string compress_mode_;
-    int64_t compress_level_;
+    int compress_level_;
     std::shared_ptr<core::FlowFile> flow_;
     std::shared_ptr<core::ProcessSession> session_;
     bool success_{false};
@@ -371,7 +373,7 @@ public:
         int64_t process(std::shared_ptr<io::BaseStream> inputStream) override {
           std::vector<uint8_t> buffer(16 * 1024U);
           int64_t read_size = 0;
-          while (read_size < writer_.flow_->getSize()) {
+          while (read_size < gsl::narrow<int64_t>(writer_.flow_->getSize())) {
             int ret = inputStream->read(buffer.data(), buffer.size());
             if (ret < 0) {
               return -1;
@@ -427,7 +429,7 @@ protected:
 
 private:
   std::shared_ptr<logging::Logger> logger_;
-  int64_t compressLevel_;
+  int compressLevel_;
   std::string compressMode_;
   std::string compressFormat_;
   bool updateFileName_;
diff --git a/extensions/libarchive/FocusArchiveEntry.cpp b/extensions/libarchive/FocusArchiveEntry.cpp
index 0795b4c..1465ba1 100644
--- a/extensions/libarchive/FocusArchiveEntry.cpp
+++ b/extensions/libarchive/FocusArchiveEntry.cpp
@@ -162,8 +162,8 @@ typedef struct {
 la_ssize_t FocusArchiveEntry::ReadCallback::read_cb(struct archive * a, void *d, const void **buf) {
   auto data = static_cast<FocusArchiveEntryReadData *>(d);
   *buf = data->buf;
-  int64_t read = 0;
-  int64_t last_read = 0;
+  int read = 0;
+  int last_read = 0;
 
   do {
     last_read = data->stream->readData(reinterpret_cast<uint8_t *>(data->buf), 8196 - read);
@@ -245,7 +245,11 @@ int64_t FocusArchiveEntry::ReadCallback::process(std::shared_ptr<io::BaseStream>
       auto fd = fopen(tmpFileName.c_str(), "w");
 
       if (archive_entry_size(entry) > 0) {
+#ifdef WIN32
+        nlen += archive_read_data_into_fd(inputArchive, _fileno(fd));
+#else
         nlen += archive_read_data_into_fd(inputArchive, fileno(fd));
+#endif
       }
 
       fclose(fd);
diff --git a/extensions/libarchive/MergeContent.cpp b/extensions/libarchive/MergeContent.cpp
index 137a872..dc07915 100644
--- a/extensions/libarchive/MergeContent.cpp
+++ b/extensions/libarchive/MergeContent.cpp
@@ -98,7 +98,7 @@ std::string MergeContent::readContent(std::string path) {
   std::ifstream in(path.c_str(), std::ios::in | std::ios::binary);
   if (in) {
     in.seekg(0, std::ios::end);
-    contents.resize(in.tellg());
+    contents.resize(gsl::narrow<size_t>(in.tellg()));
     in.seekg(0, std::ios::beg);
     in.read(&contents[0], contents.size());
     in.close();
diff --git a/extensions/libarchive/UnfocusArchiveEntry.cpp b/extensions/libarchive/UnfocusArchiveEntry.cpp
index 8468efd..b3273a8 100644
--- a/extensions/libarchive/UnfocusArchiveEntry.cpp
+++ b/extensions/libarchive/UnfocusArchiveEntry.cpp
@@ -202,7 +202,7 @@ int64_t UnfocusArchiveEntry::WriteCallback::process(std::shared_ptr<io::BaseStre
     archive_entry_set_size(entry, entryMetadata.entrySize);
     archive_entry_set_uid(entry, entryMetadata.entryUID);
     archive_entry_set_gid(entry, entryMetadata.entryGID);
-    archive_entry_set_mtime(entry, entryMetadata.entryMTime, entryMetadata.entryMTimeNsec);
+    archive_entry_set_mtime(entry, entryMetadata.entryMTime, gsl::narrow<long>(entryMetadata.entryMTimeNsec));
 
     logger_->log_info("Writing %s with type %d, perms %d, size %d, uid %d, gid %d, mtime %d,%d", entryMetadata.entryName, entryMetadata.entryType, entryMetadata.entryPerm,
                       entryMetadata.entrySize, entryMetadata.entryUID, entryMetadata.entryGID, entryMetadata.entryMTime, entryMetadata.entryMTimeNsec);
@@ -218,7 +218,7 @@ int64_t UnfocusArchiveEntry::WriteCallback::process(std::shared_ptr<io::BaseStre
 
       while (ifs.good()) {
         ifs.read(buf, sizeof(buf));
-        auto len = ifs.gcount();
+        size_t len = gsl::narrow<size_t>(ifs.gcount());
         int64_t written = archive_write_data(outputArchive, buf, len);
         if (written < 0) {
           logger_->log_error("UnfocusArchiveEntry failed to write data to "
diff --git a/extensions/rocksdb-repos/ProvenanceRepository.h b/extensions/rocksdb-repos/ProvenanceRepository.h
index 39a9e85..87728ef 100644
--- a/extensions/rocksdb-repos/ProvenanceRepository.h
+++ b/extensions/rocksdb-repos/ProvenanceRepository.h
@@ -92,7 +92,7 @@ class ProvenanceRepository : public core::Repository, public std::enable_shared_
     // Rocksdb write buffers act as a log of database operation: grow till reaching the limit, serialized after
     // This shouldn't go above 16MB and the configured total size of the db should cap it as well
     int64_t max_buffer_size = 16 << 20;
-    options.write_buffer_size = std::min(max_buffer_size, max_partition_bytes_);
+    options.write_buffer_size = gsl::narrow<size_t>(std::min(max_buffer_size, max_partition_bytes_));
     options.max_write_buffer_number = 4;
     options.min_write_buffer_number_to_merge = 1;
 
diff --git a/extensions/rocksdb-repos/RocksDbStream.cpp b/extensions/rocksdb-repos/RocksDbStream.cpp
index 7bcc2e1..a6526ec 100644
--- a/extensions/rocksdb-repos/RocksDbStream.cpp
+++ b/extensions/rocksdb-repos/RocksDbStream.cpp
@@ -90,7 +90,7 @@ int RocksDbStream::readData(std::vector<uint8_t> &buf, int buflen) {
     throw minifi::Exception{ExceptionType::GENERAL_EXCEPTION, "negative buflen"};
   }
 
-  if (buf.size() < buflen) {
+  if (buf.size() < gsl::narrow<size_t>(buflen)) {
     buf.resize(buflen);
   }
   int ret = readData(buf.data(), buflen);
@@ -103,16 +103,16 @@ int RocksDbStream::readData(std::vector<uint8_t> &buf, int buflen) {
 
 int RocksDbStream::readData(uint8_t *buf, int buflen) {
   if (!IsNullOrEmpty(buf) && exists_) {
-    int amtToRead = buflen;
+    size_t amtToRead = gsl::narrow<size_t>(buflen);
     if (offset_ >= value_.size()) {
       return 0;
     }
-    if (buflen > value_.size() - offset_) {
+    if (amtToRead > value_.size() - offset_) {
       amtToRead = value_.size() - offset_;
     }
     std::memcpy(buf, value_.data() + offset_, amtToRead);
     offset_ += amtToRead;
-    return amtToRead;
+    return gsl::narrow<int>(amtToRead);
   } else {
     return -1;
   }
diff --git a/extensions/rocksdb-repos/RocksDbStream.h b/extensions/rocksdb-repos/RocksDbStream.h
index 6bec50f..57f5c4e 100644
--- a/extensions/rocksdb-repos/RocksDbStream.h
+++ b/extensions/rocksdb-repos/RocksDbStream.h
@@ -59,7 +59,7 @@ class RocksDbStream : public io::BaseStream {
    */
   void seek(uint64_t offset) override;
 
-  const uint64_t getSize() const override {
+  const size_t getSize() const override {
     return size_;
   }
 
@@ -156,7 +156,7 @@ class RocksDbStream : public io::BaseStream {
 
   bool exists_;
 
-  int64_t offset_;
+  size_t offset_;
 
   std::string value_;
 
diff --git a/extensions/standard-processors/processors/ExtractText.cpp b/extensions/standard-processors/processors/ExtractText.cpp
index 42c5cc8..f386a11 100644
--- a/extensions/standard-processors/processors/ExtractText.cpp
+++ b/extensions/standard-processors/processors/ExtractText.cpp
@@ -41,8 +41,8 @@ namespace nifi {
 namespace minifi {
 namespace processors {
 
-#define MAX_BUFFER_SIZE 4096
-#define MAX_CAPTURE_GROUP_SIZE 1024
+constexpr size_t MAX_BUFFER_SIZE = 4096;
+constexpr int MAX_CAPTURE_GROUP_SIZE = 1024;
 
 core::Property ExtractText::Attribute(core::PropertyBuilder::createProperty("Attribute")->withDescription("Attribute to set from content")->build());
 
@@ -132,7 +132,8 @@ int64_t ExtractText::ReadCallback::process(std::shared_ptr<io::BaseStream> strea
 
   while (read_size < size_limit) {
     // Don't read more than config limit or the size of the buffer
-    ret = stream->readData(buffer_, std::min<uint64_t>(size_limit - read_size, buffer_.size()));
+    int length = gsl::narrow<int>(std::min<uint64_t>(size_limit - read_size, buffer_.size()));
+    ret = stream->readData(buffer_, length);
 
     if (ret < 0) {
       return -1;  // Stream error
@@ -161,8 +162,9 @@ int64_t ExtractText::ReadCallback::process(std::shared_ptr<io::BaseStream> strea
     bool repeatingcapture;
     ctx_->getProperty(EnableRepeatingCaptureGroup.getName(), repeatingcapture);
 
-    int maxCaptureSize;
-    ctx_->getProperty(MaxCaptureGroupLen.getName(), maxCaptureSize);
+    int maxCaptureSizeProperty;
+    ctx_->getProperty(MaxCaptureGroupLen.getName(), maxCaptureSizeProperty);
+    size_t maxCaptureSize = gsl::narrow<size_t>(maxCaptureSizeProperty);
 
     std::string contentStr = contentStream.str();
 
@@ -217,7 +219,7 @@ ExtractText::ReadCallback::ReadCallback(std::shared_ptr<core::FlowFile> flowFile
     : flowFile_(std::move(flowFile)),
       ctx_(ctx),
       logger_(std::move(lgr)) {
-  buffer_.resize(std::min<uint64_t>(flowFile_->getSize(), MAX_BUFFER_SIZE));
+  buffer_.resize(std::min(gsl::narrow<size_t>(flowFile_->getSize()), MAX_BUFFER_SIZE));
 }
 
 }  // namespace processors
diff --git a/extensions/standard-processors/processors/GenerateFlowFile.cpp b/extensions/standard-processors/processors/GenerateFlowFile.cpp
index 6b4652a..d639533 100644
--- a/extensions/standard-processors/processors/GenerateFlowFile.cpp
+++ b/extensions/standard-processors/processors/GenerateFlowFile.cpp
@@ -111,7 +111,7 @@ void GenerateFlowFile::onSchedule(const std::shared_ptr<core::ProcessContext> &c
   }
 
   if (!uniqueFlowFile_) {
-    data_.resize(fileSize_);
+    data_.resize(gsl::narrow<size_t>(fileSize_));
     generateData(data_, textData_);
   }
 }
@@ -126,7 +126,7 @@ void GenerateFlowFile::onTrigger(core::ProcessContext *context, core::ProcessSes
     }
     if (fileSize_ > 0) {
       if (uniqueFlowFile_) {
-        std::vector<char> data(fileSize_);
+        std::vector<char> data(gsl::narrow<size_t>(fileSize_));
         generateData(data, textData_);
         GenerateFlowFile::WriteCallback callback(std::move(data));
         session->write(flowFile, &callback);
diff --git a/extensions/standard-processors/processors/GetFile.cpp b/extensions/standard-processors/processors/GetFile.cpp
index 6b2a707..eee4eb0 100644
--- a/extensions/standard-processors/processors/GetFile.cpp
+++ b/extensions/standard-processors/processors/GetFile.cpp
@@ -247,10 +247,10 @@ bool GetFile::acceptFile(std::string fullName, std::string name, const GetFileRe
     if (request.ignoreHiddenFile && utils::file::FileUtils::is_hidden(fullName))
       return false;
 
-    if (access(fullName.c_str(), R_OK) != 0)
+    if (utils::file::FileUtils::access(fullName.c_str(), R_OK) != 0)
       return false;
 
-    if (request.keepSourceFile == false && access(fullName.c_str(), W_OK) != 0)
+    if (request.keepSourceFile == false && utils::file::FileUtils::access(fullName.c_str(), W_OK) != 0)
       return false;
 
     utils::Regex rgx(request.fileFilter);
diff --git a/extensions/standard-processors/processors/GetTCP.cpp b/extensions/standard-processors/processors/GetTCP.cpp
index 5a8ab19..44d89e7 100644
--- a/extensions/standard-processors/processors/GetTCP.cpp
+++ b/extensions/standard-processors/processors/GetTCP.cpp
@@ -166,7 +166,7 @@ void GetTCP::onSchedule(const std::shared_ptr<core::ProcessContext> &context, co
       int reconnects = 0;
       do {
         if ( socket_ring_buffer_.try_dequeue(socket_ptr) ) {
-          int size_read = socket_ptr->readData(buffer, receive_buffer_size_, false);
+          int size_read = socket_ptr->readData(buffer, gsl::narrow<int>(receive_buffer_size_), false);
           if (size_read >= 0) {
             if (size_read > 0) {
               // determine cut location
diff --git a/extensions/standard-processors/processors/LogAttribute.cpp b/extensions/standard-processors/processors/LogAttribute.cpp
index 0021877..ec6539d 100644
--- a/extensions/standard-processors/processors/LogAttribute.cpp
+++ b/extensions/standard-processors/processors/LogAttribute.cpp
@@ -143,7 +143,7 @@ void LogAttribute::onTrigger(const std::shared_ptr<core::ProcessContext> &contex
     }
     if (logPayload && flow->getSize() <= 1024 * 1024) {
       message << "\n" << "Payload:" << "\n";
-      ReadCallback callback(logger_, flow->getSize());
+      ReadCallback callback(logger_, gsl::narrow<size_t>(flow->getSize()));
       session->read(flow, &callback);
 
       std::string printable_payload;
diff --git a/extensions/standard-processors/processors/LogAttribute.h b/extensions/standard-processors/processors/LogAttribute.h
index 076ef90..190d3d1 100644
--- a/extensions/standard-processors/processors/LogAttribute.h
+++ b/extensions/standard-processors/processors/LogAttribute.h
@@ -98,7 +98,7 @@ class LogAttribute : public core::Processor {
   // Nest Callback Class for read stream
   class ReadCallback : public InputStreamCallback {
    public:
-    ReadCallback(std::shared_ptr<logging::Logger> logger, uint64_t size)
+    ReadCallback(std::shared_ptr<logging::Logger> logger, size_t size)
         : logger_(std::move(logger))
         , buffer_(size)  {
     }
diff --git a/extensions/standard-processors/processors/PutFile.cpp b/extensions/standard-processors/processors/PutFile.cpp
index 43ace43..1d7de94 100644
--- a/extensions/standard-processors/processors/PutFile.cpp
+++ b/extensions/standard-processors/processors/PutFile.cpp
@@ -30,9 +30,6 @@
 #include <Windows.h>
 #endif
 #include "utils/file/FileUtils.h"
-#ifndef S_ISDIR
-#define S_ISDIR(mode)  (((mode) & S_IFMT) == S_IFDIR)
-#endif
 
 namespace org {
 namespace apache {
@@ -133,26 +130,22 @@ void PutFile::onTrigger(core::ProcessContext *context, core::ProcessSession *ses
   // If file exists, apply conflict resolution strategy
   struct stat statResult;
 
-  if ((max_dest_files_ != -1) && (stat(directory.c_str(), &statResult) == 0)) {
-    // something exists at directory path
-    if (S_ISDIR(statResult.st_mode)) {
-      // it's a directory, count the files
-      int64_t ct = 0;
-
-      // Callback, called for each file entry in the listed directory
-      // Return value is used to break (false) or continue (true) listing
-      auto lambda = [&ct, this](const std::string&, const std::string&) -> bool {
-        return ++ct < max_dest_files_;
-      };
-
-      utils::file::FileUtils::list_dir(directory, lambda, logger_, false);
-
-      if (ct >= max_dest_files_) {
-        logger_->log_warn("Routing to failure because the output directory %s has at least %u files, which exceeds the "
-                          "configured max number of files", directory, max_dest_files_);
-        session->transfer(flowFile, Failure);
-        return;
-      }
+  if ((max_dest_files_ != -1) && utils::file::FileUtils::is_directory(directory.c_str())) {
+    int64_t count = 0;
+
+    // Callback, called for each file entry in the listed directory
+    // Return value is used to break (false) or continue (true) listing
+    auto lambda = [&count, this](const std::string&, const std::string&) -> bool {
+      return ++count < max_dest_files_;
+    };
+
+    utils::file::FileUtils::list_dir(directory, lambda, logger_, false);
+
+    if (count >= max_dest_files_) {
+      logger_->log_warn("Routing to failure because the output directory %s has at least %u files, which exceeds the "
+                        "configured max number of files", directory, max_dest_files_);
+      session->transfer(flowFile, Failure);
+      return;
     }
   }
 
@@ -306,7 +299,7 @@ bool PutFile::ReadCallback::commit() {
 // Clean up resources
 PutFile::ReadCallback::~ReadCallback() {
   // Clean up tmp file, if necessary
-  unlink(tmp_file_.c_str());
+  std::remove(tmp_file_.c_str());
 }
 
 } /* namespace processors */
diff --git a/extensions/standard-processors/tests/integration/TailFileTest.cpp b/extensions/standard-processors/tests/integration/TailFileTest.cpp
index 9229677..fc1e931 100644
--- a/extensions/standard-processors/tests/integration/TailFileTest.cpp
+++ b/extensions/standard-processors/tests/integration/TailFileTest.cpp
@@ -17,10 +17,10 @@
  */
 
 #include <sys/stat.h>
-#include <chrono>
-#include <thread>
+
 #undef NDEBUG
 #include <cassert>
+#include <cstdio>
 #include <utility>
 #include <fstream>
 #include <memory>
@@ -29,6 +29,7 @@
 #include <vector>
 #include <iostream>
 #include <sstream>
+
 #include "utils/StringUtils.h"
 #include "core/Core.h"
 #include "core/logging/Logger.h"
@@ -65,8 +66,8 @@ class TailFileTestHarness : public IntegrationBase {
   }
 
   void cleanup() override {
-    unlink(ss.str().c_str());
-    unlink(statefile.c_str());
+    std::remove(ss.str().c_str());
+    std::remove(statefile.c_str());
   }
 
   void runAssertions() override {
diff --git a/extensions/standard-processors/tests/unit/ControllerServiceTests.cpp b/extensions/standard-processors/tests/unit/ControllerServiceTests.cpp
index 2b468cb..0610431 100644
--- a/extensions/standard-processors/tests/unit/ControllerServiceTests.cpp
+++ b/extensions/standard-processors/tests/unit/ControllerServiceTests.cpp
@@ -59,7 +59,7 @@ TEST_CASE("Test StandardControllerServiceNode nullPtr", "[cs1]") {
 
   try {
     std::shared_ptr<core::controller::StandardControllerServiceNode> testNode = std::make_shared<core::controller::StandardControllerServiceNode>(nullptr, "ID", std::make_shared<minifi::Configure>());
-  } catch (minifi::Exception &ex) {
+  } catch (const minifi::Exception &) {
     return;
   }
 
diff --git a/extensions/standard-processors/tests/unit/GenerateFlowFileTests.cpp b/extensions/standard-processors/tests/unit/GenerateFlowFileTests.cpp
index 5245a29..8335909 100644
--- a/extensions/standard-processors/tests/unit/GenerateFlowFileTests.cpp
+++ b/extensions/standard-processors/tests/unit/GenerateFlowFileTests.cpp
@@ -57,7 +57,7 @@ TEST_CASE("GenerateFlowFileTest", "[generateflowfiletest]") {
     std::ifstream is(path + utils::file::FileUtils::get_separator() + filename, std::ifstream::binary);
 
     is.seekg(0, is.end);
-    size_t length = is.tellg();
+    size_t length = gsl::narrow<size_t>(is.tellg());
     is.seekg(0, is.beg);
 
     std::vector<char> content(length);
diff --git a/extensions/standard-processors/tests/unit/ProcessorTests.cpp b/extensions/standard-processors/tests/unit/ProcessorTests.cpp
index f7dc551..e56e301 100644
--- a/extensions/standard-processors/tests/unit/ProcessorTests.cpp
+++ b/extensions/standard-processors/tests/unit/ProcessorTests.cpp
@@ -15,6 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#include <cstdio>
 #include <utility>
 #include <memory>
 #include <string>
@@ -113,7 +114,7 @@ TEST_CASE("Test GetFileMultiple", "[getfileCreate3]") {
     processor->incrementActiveTasks();
     processor->setScheduledState(core::ScheduledState::RUNNING);
     processor->onTrigger(context, session);
-    unlink(ss.str().c_str());
+    std::remove(ss.str().c_str());
     reporter = session->getProvenanceReporter();
 
     REQUIRE(processor->getName() == "getfileCreate2");
@@ -209,11 +210,7 @@ TEST_CASE("Test GetFile Ignore", "[getfileCreate3]") {
   processor->incrementActiveTasks();
   processor->setScheduledState(core::ScheduledState::RUNNING);
   processor->onTrigger(context, session);
-#ifndef WIN32
-  unlink(hidden_file_name.c_str());
-#else
-  _unlink(hidden_file_name.c_str());
-#endif /* !WIN32 */
+  std::remove(hidden_file_name.c_str());
   reporter = session->getProvenanceReporter();
 
   REQUIRE(processor->getName() == "getfileCreate2");
@@ -312,7 +309,7 @@ TEST_CASE("LogAttributeTest", "[getfileCreate3]") {
   plan->reset();
   testController.runSession(plan, false);
 
-  unlink(ss.str().c_str());
+  std::remove(ss.str().c_str());
 
   records = plan->getProvenanceRecords();
   record = plan->getCurrentFlowFile();
@@ -388,7 +385,7 @@ void testMultiplesLogAttribute(int fileCount, int flowsToLog, std::string verify
   testController.runSession(plan, false);
 
   for (const auto &created_file : files) {
-    unlink(created_file.c_str());
+    std::remove(created_file.c_str());
   }
 
   records = plan->getProvenanceRecords();
@@ -614,13 +611,3 @@ TEST_CASE("TestRPGWithoutHostInvalidPort", "[TestRPG5]") {
 TEST_CASE("TestRPGValid", "[TestRPG6]") {
   testRPGBypass("", "8080", "8080", false);
 }
-
-int fileSize(const char *add) {
-  std::ifstream mySource;
-  mySource.open(add, std::ios_base::binary);
-  mySource.seekg(0, std::ios_base::end);
-  int size = mySource.tellg();
-  mySource.close();
-  return size;
-}
-
diff --git a/extensions/standard-processors/tests/unit/PutFileTests.cpp b/extensions/standard-processors/tests/unit/PutFileTests.cpp
index 680a494..fdf5a30 100644
--- a/extensions/standard-processors/tests/unit/PutFileTests.cpp
+++ b/extensions/standard-processors/tests/unit/PutFileTests.cpp
@@ -15,7 +15,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 #include <sys/stat.h>
+
+#include <cstdio>
 #include <utility>
 #include <memory>
 #include <string>
@@ -23,7 +26,6 @@
 #include <set>
 #include <fstream>
 
-
 #include "utils/file/FileUtils.h"
 #include "TestBase.h"
 #include "processors/LogAttribute.h"
@@ -91,7 +93,7 @@ TEST_CASE("PutFileTest", "[getfileputpfile]") {
   record = plan->getCurrentFlowFile();
   testController.runSession(plan, false);
 
-  unlink(ss.str().c_str());
+  std::remove(ss.str().c_str());
 
   REQUIRE(true == LogTestController::getInstance().contains("key:absolute.path value:" + ss.str()));
   REQUIRE(true == LogTestController::getInstance().contains("Size:8 Offset:0"));
@@ -163,7 +165,7 @@ TEST_CASE("PutFileTestFileExists", "[getfileputpfile]") {
   record = plan->getCurrentFlowFile();
   testController.runSession(plan, false);
 
-  unlink(ss.str().c_str());
+  std::remove(ss.str().c_str());
 
   REQUIRE(true == LogTestController::getInstance().contains("key:absolute.path value:" + ss.str()));
   REQUIRE(true == LogTestController::getInstance().contains("Size:8 Offset:0"));
@@ -231,7 +233,7 @@ TEST_CASE("PutFileTestFileExistsIgnore", "[getfileputpfile]") {
   record = plan->getCurrentFlowFile();
   testController.runSession(plan, false);
 
-  unlink(ss.str().c_str());
+  std::remove(ss.str().c_str());
 
   REQUIRE(true == LogTestController::getInstance().contains("key:absolute.path value:" + ss.str()));
   REQUIRE(true == LogTestController::getInstance().contains("Size:8 Offset:0"));
@@ -299,7 +301,7 @@ TEST_CASE("PutFileTestFileExistsReplace", "[getfileputpfile]") {
   record = plan->getCurrentFlowFile();
   testController.runSession(plan, false);
 
-  unlink(ss.str().c_str());
+  std::remove(ss.str().c_str());
 
   REQUIRE(true == LogTestController::getInstance().contains("key:absolute.path value:" + ss.str()));
   REQUIRE(true == LogTestController::getInstance().contains("Size:8 Offset:0"));
diff --git a/extensions/windows-event-log/ConsumeWindowsEventLog.cpp b/extensions/windows-event-log/ConsumeWindowsEventLog.cpp
index 103a7b9..70f4d08 100644
--- a/extensions/windows-event-log/ConsumeWindowsEventLog.cpp
+++ b/extensions/windows-event-log/ConsumeWindowsEventLog.cpp
@@ -461,7 +461,7 @@ void ConsumeWindowsEventLog::substituteXMLPercentageItems(pugi::xml_document& do
         try {
           // Assumption - first character is not '0', otherwise not all digits will be replaced by 'value'.
           number = std::stoul(&nodeText[numberPos]);
-        } catch (std::invalid_argument& e) {
+        } catch (const std::invalid_argument &) {
           continue;
         }
 
@@ -593,7 +593,7 @@ bool ConsumeWindowsEventLog::createEventRender(EVT_HANDLE hEvent, EventRender& e
   if (writeXML_) {
     logger_->log_trace("Writing event in XML");
     substituteXMLPercentageItems(doc);
-    logger_->log_trace("Finish substituting \%\% in XML");
+    logger_->log_trace("Finish substituting %% in XML");
 
     if (resolve_as_attributes_) {
       eventRender.matched_fields_ = walker.getFieldValues();
diff --git a/extensions/windows-event-log/wel/WindowsEventLog.cpp b/extensions/windows-event-log/wel/WindowsEventLog.cpp
index 31c1fef..0e48503 100644
--- a/extensions/windows-event-log/wel/WindowsEventLog.cpp
+++ b/extensions/windows-event-log/wel/WindowsEventLog.cpp
@@ -130,7 +130,7 @@ std::string WindowsEventLogMetadataImpl::getEventData(EVT_FORMAT_MESSAGE_FLAGS f
 
   std::string event_data;
 
-  if (metadata_ptr_ == NULL | event_ptr_ == NULL) {
+  if (metadata_ptr_ == NULL || event_ptr_ == NULL) {
     return event_data;
   }
 
diff --git a/libminifi/include/FlowControlProtocol.h b/libminifi/include/FlowControlProtocol.h
index 4a60eca..ac3b060 100644
--- a/libminifi/include/FlowControlProtocol.h
+++ b/libminifi/include/FlowControlProtocol.h
@@ -35,6 +35,7 @@
 #include "core/logging/LoggerConfiguration.h"
 #include "core/Property.h"
 #include "properties/Configure.h"
+#include "utils/file/FileUtils.h"
 
 namespace org {
 namespace apache {
@@ -186,7 +187,7 @@ class FlowControlProtocol {
   // Destructor
   virtual ~FlowControlProtocol() {
     stop();
-    if (_socket) close(_socket);
+    if (_socket) utils::file::FileUtils::close(_socket);
   }
 
  public:
diff --git a/libminifi/include/FlowFileRecord.h b/libminifi/include/FlowFileRecord.h
index 1fa4c5d..7557056 100644
--- a/libminifi/include/FlowFileRecord.h
+++ b/libminifi/include/FlowFileRecord.h
@@ -135,7 +135,7 @@ class FlowFileRecord : public core::FlowFile, public io::Serializable {
   bool DeSerialize(const uint8_t *buffer, const int bufferSize);
   //! DeSerialize
   bool DeSerialize(io::DataStream &stream) {
-    return DeSerialize(stream.getBuffer(), stream.getSize());
+    return DeSerialize(stream.getBuffer(), gsl::narrow<int>(stream.getSize()));
   }
   //! DeSerialize
   bool DeSerialize(std::string key);
diff --git a/libminifi/include/c2/C2Agent.h b/libminifi/include/c2/C2Agent.h
index 5943941..273fd43 100644
--- a/libminifi/include/c2/C2Agent.h
+++ b/libminifi/include/c2/C2Agent.h
@@ -190,7 +190,7 @@ class C2Agent : public state::UpdateController {
   int64_t heart_beat_period_;
 
   // maximum number of queued messages to send to the c2 server
-  int16_t max_c2_responses;
+  size_t max_c2_responses;
 
   // time point the last time we performed a heartbeat.
   std::chrono::steady_clock::time_point last_run_;
diff --git a/libminifi/include/core/ClassLoader.h b/libminifi/include/core/ClassLoader.h
index d8dcece..6e7b332 100644
--- a/libminifi/include/core/ClassLoader.h
+++ b/libminifi/include/core/ClassLoader.h
@@ -436,7 +436,6 @@ class ClassLoader {
 
   void *dlsym(void *handle, const char *name) {
     FARPROC symbol;
-    HMODULE hModule;
 
     symbol = GetProcAddress((HMODULE)handle, name);
 
@@ -470,7 +469,6 @@ class ClassLoader {
   void *dlopen(const char *file, int mode) {
     std::lock_guard<std::mutex> lock(internal_mutex_);
     HMODULE object;
-    char * current_error = NULL;
     uint32_t uMode = SetErrorMode(SEM_FAILCRITICALERRORS);
     if (nullptr == file) {
       HMODULE allModules[1024];
@@ -483,8 +481,6 @@ class ClassLoader {
       if (EnumProcessModules(current_process_id, allModules,
               sizeof(allModules), &cbNeeded) != 0) {
         for (uint32_t i = 0; i < cbNeeded / sizeof(HMODULE); i++) {
-          TCHAR szModName[MAX_PATH];
-
           // Get the full path to the module's file.
           resource_mapping_.insert(std::make_pair(allModules[i], "minifi-system"));
         }
diff --git a/libminifi/include/core/TypedValues.h b/libminifi/include/core/TypedValues.h
index 29c585f..f735d37 100644
--- a/libminifi/include/core/TypedValues.h
+++ b/libminifi/include/core/TypedValues.h
@@ -141,7 +141,7 @@ class DataSizeValue : public TransformableValue, public state::response::UInt64V
     auto ival = std::strtoll(cvalue, &pEnd, 0);
 
     if (pEnd[0] == '\0') {
-      output = ival;
+      output = gsl::narrow<T>(ival);
       return true;
     }
 
@@ -152,7 +152,7 @@ class DataSizeValue : public TransformableValue, public state::response::UInt64V
 
     char end0 = toupper(pEnd[0]);
     if (end0 == 'B') {
-      output = ival;
+      output = gsl::narrow<T>(ival);
       return true;
     } else if ((end0 == 'K') || (end0 == 'M') || (end0 == 'G') || (end0 == 'T') || (end0 == 'P')) {
       if (pEnd[1] == '\0') {
@@ -170,7 +170,7 @@ class DataSizeValue : public TransformableValue, public state::response::UInt64V
             }
           }
         }
-        output = ival * multiplier;
+        output = gsl::narrow<T>(ival * multiplier);
         return true;
 
       } else if ((pEnd[1] == 'b' || pEnd[1] == 'B') && (pEnd[2] == '\0')) {
@@ -188,7 +188,7 @@ class DataSizeValue : public TransformableValue, public state::response::UInt64V
             }
           }
         }
-        output = ival * multiplier;
+        output = gsl::narrow<T>(ival * multiplier);
         return true;
       }
     }
diff --git a/libminifi/include/core/repository/AtomicRepoEntries.h b/libminifi/include/core/repository/AtomicRepoEntries.h
index 8c15f79..bcbe320 100644
--- a/libminifi/include/core/repository/AtomicRepoEntries.h
+++ b/libminifi/include/core/repository/AtomicRepoEntries.h
@@ -122,7 +122,7 @@ noexcept      : key_(std::move(other.key_)),
        * buffer, the size of timestamp, and the general
        * system word size
        */
-      uint64_t size() {
+      size_t size() {
         return buffer_.size();
       }
 
diff --git a/libminifi/include/core/repository/VolatileRepository.h b/libminifi/include/core/repository/VolatileRepository.h
index 67c3f92..31c0f87 100644
--- a/libminifi/include/core/repository/VolatileRepository.h
+++ b/libminifi/include/core/repository/VolatileRepository.h
@@ -65,7 +65,7 @@ class VolatileRepository : public core::Repository, public std::enable_shared_fr
         current_size_(0),
         current_index_(0),
         max_count_(10000),
-        max_size_(maxPartitionBytes * 0.75),
+        max_size_(static_cast<size_t>(maxPartitionBytes * 0.75)),
         logger_(logging::LoggerFactory<VolatileRepository>::getLogger()) {
     purge_required_ = false;
   }
@@ -214,7 +214,7 @@ bool VolatileRepository<T>::initialize(const std::shared_ptr<Configure> &configu
     strstream << Configure::nifi_volatile_repository_options << getName() << "." << volatile_repo_max_count;
     if (configure->get(strstream.str(), value)) {
       if (core::Property::StringToInt(value, max_cnt)) {
-        max_count_ = max_cnt;
+        max_count_ = gsl::narrow<uint32_t>(max_cnt);
       }
     }
 
@@ -227,7 +227,7 @@ bool VolatileRepository<T>::initialize(const std::shared_ptr<Configure> &configu
         if (max_bytes <= 0) {
           max_size_ = (std::numeric_limits<uint32_t>::max)();
         } else {
-          max_size_ = max_bytes;
+          max_size_ = gsl::narrow<size_t>(max_bytes);
         }
       }
     }
diff --git a/libminifi/include/core/state/nodes/DeviceInformation.h b/libminifi/include/core/state/nodes/DeviceInformation.h
index ddf90d6..e7c9a6c 100644
--- a/libminifi/include/core/state/nodes/DeviceInformation.h
+++ b/libminifi/include/core/state/nodes/DeviceInformation.h
@@ -142,9 +142,6 @@ class Device {
 
       DWORD dwRetVal = 0;
 
-      std::hash<std::string> hash_fn;
-      std::set<std::string> macs;
-
       ULONG adapterLen = sizeof(IP_ADAPTER_INFO);
       adapterPtr = reinterpret_cast<IP_ADAPTER_INFO*>(malloc(sizeof(IP_ADAPTER_INFO)));
       if (adapterPtr == NULL) {
diff --git a/libminifi/include/io/AtomicEntryStream.h b/libminifi/include/io/AtomicEntryStream.h
index 192d7c4..1884a62 100644
--- a/libminifi/include/io/AtomicEntryStream.h
+++ b/libminifi/include/io/AtomicEntryStream.h
@@ -63,7 +63,7 @@ class AtomicEntryStream : public BaseStream {
    */
   void seek(uint64_t offset) override;
 
-  const uint64_t getSize() const override {
+  const size_t getSize() const override {
     return length_;
   }
 
@@ -124,7 +124,7 @@ AtomicEntryStream<T>::~AtomicEntryStream() {
 template<typename T>
 void AtomicEntryStream<T>::seek(uint64_t offset) {
   std::lock_guard<std::recursive_mutex> lock(entry_lock_);
-  offset_ = offset;
+  offset_ = gsl::narrow<size_t>(offset);
 }
 
 template<typename T>
diff --git a/libminifi/include/io/BaseStream.h b/libminifi/include/io/BaseStream.h
index 251637c..6b90cab 100644
--- a/libminifi/include/io/BaseStream.h
+++ b/libminifi/include/io/BaseStream.h
@@ -176,7 +176,7 @@ class BaseStream : public DataStream, public Serializable {
    **/
   int read(uint64_t &value, bool is_little_endian = EndiannessCheck::IS_LITTLE) override;
 
-  const uint64_t getSize() const override {
+  const size_t getSize() const override {
     if (LIKELY(composable_stream_ == this)) {
       return buffer.size();
     } else {
diff --git a/libminifi/include/io/CRCStream.h b/libminifi/include/io/CRCStream.h
index f95ff5e..eeb24d9 100644
--- a/libminifi/include/io/CRCStream.h
+++ b/libminifi/include/io/CRCStream.h
@@ -42,8 +42,6 @@ namespace nifi {
 namespace minifi {
 namespace io {
 
-#define htonll_r(x) ((((uint64_t)htonl(x)) << 32) + htonl((x) >> 32))
-
 template<typename T>
 class CRCStream : public BaseStream {
  public:
@@ -139,7 +137,7 @@ class CRCStream : public BaseStream {
    */
   int read(uint16_t &value, bool is_little_endian = EndiannessCheck::IS_LITTLE) override;
 
-  const uint64_t getSize() const override { return child_stream_->getSize(); }
+  const size_t getSize() const override { return child_stream_->getSize(); }
 
   void closeStream() override { child_stream_->closeStream(); }
 
@@ -183,7 +181,7 @@ class CRCStream : public BaseStream {
     return readData(reinterpret_cast<uint8_t*>(buf.data()), sizeof(t));
   }
 
-  uint64_t crc_;
+  uLong crc_;
   T *child_stream_;
   bool disable_encoding_;
 };
@@ -197,7 +195,7 @@ CRCStream<T>::CRCStream(T *child_stream)
 
 template<typename T>
 CRCStream<T>::CRCStream(T *child_stream, uint64_t initial_crc)
-    : crc_(initial_crc),
+    : crc_(gsl::narrow<uLong>(initial_crc)),
       child_stream_(child_stream),
       disable_encoding_(false) {
 }
@@ -261,7 +259,7 @@ template<typename T>
 int CRCStream<T>::write(uint64_t base_value, bool is_little_endian) {
   if (disable_encoding_)
     is_little_endian = false;
-  const uint64_t value = is_little_endian == 1 ? htonll_r(base_value) : base_value;
+  const uint64_t value = is_little_endian == 1 ? byteSwap(base_value) : base_value;
   uint8_t bytes[sizeof value];
   std::copy(static_cast<const char*>(static_cast<const void*>(&value)), static_cast<const char*>(static_cast<const void*>(&value)) + sizeof value, bytes);
   return writeData(bytes, sizeof value);
@@ -271,7 +269,7 @@ template<typename T>
 int CRCStream<T>::write(uint32_t base_value, bool is_little_endian) {
   if (disable_encoding_)
     is_little_endian = false;
-  const uint32_t value = is_little_endian ? htonl(base_value) : base_value;
+  const uint32_t value = is_little_endian ? byteSwap(base_value) : base_value;
   uint8_t bytes[sizeof value];
   std::copy(static_cast<const char*>(static_cast<const void*>(&value)), static_cast<const char*>(static_cast<const void*>(&value)) + sizeof value, bytes);
   return writeData(bytes, sizeof value);
@@ -281,7 +279,7 @@ template<typename T>
 int CRCStream<T>::write(uint16_t base_value, bool is_little_endian) {
   if (disable_encoding_)
     is_little_endian = false;
-  const uint16_t value = is_little_endian == 1 ? htons(base_value) : base_value;
+  const uint16_t value = is_little_endian == 1 ? byteSwap(base_value) : base_value;
   uint8_t bytes[sizeof value];
   std::copy(static_cast<const char*>(static_cast<const void*>(&value)), static_cast<const char*>(static_cast<const void*>(&value)) + sizeof value, bytes);
   return writeData(bytes, sizeof value);
diff --git a/libminifi/include/io/DataStream.h b/libminifi/include/io/DataStream.h
index 3574120..071864e 100644
--- a/libminifi/include/io/DataStream.h
+++ b/libminifi/include/io/DataStream.h
@@ -23,6 +23,8 @@
 #include <cstdint>
 #include <vector>
 #include "EndianCheck.h"
+#include "utils/gsl.h"
+
 namespace org {
 namespace apache {
 namespace nifi {
@@ -42,7 +44,7 @@ class DataStream {
   /**
    * Constructor
    **/
-  explicit DataStream(const uint8_t *buf, const uint32_t buflen) {
+  explicit DataStream(const uint8_t *buf, const int buflen) {
     writeData(const_cast<uint8_t*>(buf), buflen);
   }
 
@@ -53,7 +55,7 @@ class DataStream {
   }
 
   virtual void seek(uint64_t offset) {
-    readBuffer += offset;
+    readBuffer += gsl::narrow<uint32_t>(offset);
   }
 
   virtual void closeStream() { }
@@ -108,7 +110,7 @@ class DataStream {
    * Retrieve size of data stream
    * @return size of data stream
    **/
-  virtual const uint64_t getSize() const {
+  virtual const size_t getSize() const {
     return buffer.size();
   }
 
diff --git a/libminifi/include/io/DescriptorStream.h b/libminifi/include/io/DescriptorStream.h
index b82a628..e4ec855 100644
--- a/libminifi/include/io/DescriptorStream.h
+++ b/libminifi/include/io/DescriptorStream.h
@@ -57,7 +57,7 @@ class DescriptorStream : public io::BaseStream {
    */
   void seek(uint64_t offset) override;
 
-  const uint64_t getSize() const override {
+  const size_t getSize() const override {
     return -1;
   }
 
diff --git a/libminifi/include/io/FileStream.h b/libminifi/include/io/FileStream.h
index b811edd..49f7a53 100644
--- a/libminifi/include/io/FileStream.h
+++ b/libminifi/include/io/FileStream.h
@@ -65,7 +65,7 @@ class FileStream : public io::BaseStream {
    */
   void seek(uint64_t offset) override;
 
-  const uint64_t getSize() const override {
+  const size_t getSize() const override {
     return length_;
   }
 
diff --git a/libminifi/include/io/NonConvertingStream.h b/libminifi/include/io/NonConvertingStream.h
index b6e2769..4ad3155 100644
--- a/libminifi/include/io/NonConvertingStream.h
+++ b/libminifi/include/io/NonConvertingStream.h
@@ -171,7 +171,7 @@ class NonConvertingStream : public BaseStream  {
    **/
   int read(uint64_t &value, bool is_little_endian = false) override;
 
-  const uint64_t getSize() const override {
+  const size_t getSize() const override {
       if (composable_stream_ == this) {
         return buffer.size();
       } else {
diff --git a/libminifi/include/io/Serializable.h b/libminifi/include/io/Serializable.h
index 8b25a65..8c77015 100644
--- a/libminifi/include/io/Serializable.h
+++ b/libminifi/include/io/Serializable.h
@@ -44,8 +44,9 @@ Integral byteSwap(Integral i) {
 #ifdef htonll
   return htonll(i);
 #else
-  #define htonll_r(x) ((((uint64_t)htonl(x)) << 32) + htonl((x) >> 32))
-  return htonll_r(i);
+  uint32_t lower_32_bits = static_cast<uint32_t>(i);
+  uint32_t higher_32_bits = static_cast<uint32_t>(i >> 32);
+  return (static_cast<uint64_t>(byteSwap(lower_32_bits)) << 32) + byteSwap(higher_32_bits);
 #endif
 }
 
diff --git a/libminifi/include/io/tls/SecureDescriptorStream.h b/libminifi/include/io/tls/SecureDescriptorStream.h
index 7777c1a..1fe3ff1 100644
--- a/libminifi/include/io/tls/SecureDescriptorStream.h
+++ b/libminifi/include/io/tls/SecureDescriptorStream.h
@@ -61,7 +61,7 @@ class SecureDescriptorStream : public io::BaseStream {
    */
   void seek(uint64_t offset) override;
 
-  const uint64_t getSize() const override {
+  const size_t getSize() const override {
     return -1;
   }
 
diff --git a/libminifi/include/sitetosite/SiteToSite.h b/libminifi/include/sitetosite/SiteToSite.h
index dbd63b0..43dcccd 100644
--- a/libminifi/include/sitetosite/SiteToSite.h
+++ b/libminifi/include/sitetosite/SiteToSite.h
@@ -246,8 +246,6 @@ class Transaction {
     total_transfers_ = 0;
     _bytes = 0;
 
-    char uuidStr[37];
-
     // Generate the global UUID for the transaction
     id_generator_->generate(uuid_);
     uuid_str_ = uuid_.to_string();
diff --git a/libminifi/include/sitetosite/SiteToSiteClient.h b/libminifi/include/sitetosite/SiteToSiteClient.h
index 5d874eb..bbf08ec 100644
--- a/libminifi/include/sitetosite/SiteToSiteClient.h
+++ b/libminifi/include/sitetosite/SiteToSiteClient.h
@@ -292,10 +292,10 @@ class WriteCallback : public OutputStreamCallback {
   // void process(std::ofstream *stream) {
   int64_t process(std::shared_ptr<io::BaseStream> stream) {
     uint8_t buffer[16384];
-    int len = _packet->_size;
-    int total = 0;
+    uint64_t len = _packet->_size;
+    uint64_t total = 0;
     while (len > 0) {
-      int size = len < 16384 ? len : 16384;
+      int size = len < 16384 ? static_cast<int>(len) : 16384;
       int ret = _packet->transaction_->getStream().readData(buffer, size);
       if (ret != size) {
         logging::LOG_ERROR(_packet->logger_reference_) << "Site2Site Receive Flow Size " << size << " Failed " << ret << ", should have received " << len;
@@ -305,7 +305,7 @@ class WriteCallback : public OutputStreamCallback {
       len -= size;
       total += size;
     }
-    logging::LOG_INFO(_packet->logger_reference_) << "Received " << len << " from stream";
+    logging::LOG_INFO(_packet->logger_reference_) << "Received " << total << " from stream";
     return len;
   }
 };
diff --git a/libminifi/include/utils/ByteArrayCallback.h b/libminifi/include/utils/ByteArrayCallback.h
index fdde3f6..826957b 100644
--- a/libminifi/include/utils/ByteArrayCallback.h
+++ b/libminifi/include/utils/ByteArrayCallback.h
@@ -48,7 +48,7 @@ class ByteInputCallBack : public InputStreamCallback {
     if (stream->getSize() > 0) {
       vec.resize(stream->getSize());
 
-      stream->readData(reinterpret_cast<uint8_t*>(vec.data()), stream->getSize());
+      stream->readData(reinterpret_cast<uint8_t*>(vec.data()), gsl::narrow<int>(stream->getSize()));
     }
 
     ptr = reinterpret_cast<char*>(&vec[0]);
diff --git a/libminifi/include/utils/HTTPClient.h b/libminifi/include/utils/HTTPClient.h
index ad5f128..1069546 100644
--- a/libminifi/include/utils/HTTPClient.h
+++ b/libminifi/include/utils/HTTPClient.h
@@ -15,6 +15,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
+// Visual Studio 2017 warns when overriding a deprecated function, even if
+// the override is also deprecated.  Note that we need to put this #pragma
+// here, because it doesn't work inside the #ifndef
+#ifdef WIN32
+#pragma warning(push)
+#pragma warning(disable: 4996)
+#endif
+
 #ifndef LIBMINIFI_INCLUDE_UTILS_HTTPCLIENT_H_
 #define LIBMINIFI_INCLUDE_UTILS_HTTPCLIENT_H_
 
@@ -262,12 +271,10 @@ class HTTPRequestResponse {
 
 class BaseHTTPClient {
  public:
-  explicit BaseHTTPClient(const std::string &url, const std::shared_ptr<minifi::controllers::SSLContextService> ssl_context_service = nullptr) {
-    response_code = -1;
+  explicit BaseHTTPClient(const std::string &url, const std::shared_ptr<minifi::controllers::SSLContextService> ssl_context_service = nullptr) : response_code(-1) {
   }
 
-  BaseHTTPClient() {
-    response_code = -1;
+  BaseHTTPClient() : response_code(-1) {
   }
 
   virtual ~BaseHTTPClient() = default;
@@ -307,7 +314,7 @@ class BaseHTTPClient {
     return false;
   }
 
-  virtual int64_t &getResponseCode() {
+  virtual int64_t getResponseCode() const {
     return response_code;
   }
 
@@ -375,3 +382,7 @@ extern void parse_url(const std::string *url, std::string *host, int *port, std:
 }  // namespace org
 
 #endif  // LIBMINIFI_INCLUDE_UTILS_HTTPCLIENT_H_
+
+#ifdef WIN32
+#pragma warning(pop)
+#endif  // NOLINT
diff --git a/libminifi/include/utils/ThreadPool.h b/libminifi/include/utils/ThreadPool.h
index 1132c7d..93890d7 100644
--- a/libminifi/include/utils/ThreadPool.h
+++ b/libminifi/include/utils/ThreadPool.h
@@ -229,7 +229,7 @@ class ThreadPool {
   bool isTaskRunning(const std::string &identifier) const {
     try {
       return task_status_.at(identifier) == true;
-    } catch (const std::out_of_range &e) {
+    } catch (const std::out_of_range &) {
       return false;
     }
   }
diff --git a/libminifi/include/utils/file/FileManager.h b/libminifi/include/utils/file/FileManager.h
index 701c6a2..79cef44 100644
--- a/libminifi/include/utils/file/FileManager.h
+++ b/libminifi/include/utils/file/FileManager.h
@@ -63,7 +63,7 @@ class FileManager {
 
   ~FileManager() {
     for (auto file : unique_files_) {
-      unlink(file.c_str());
+      std::remove(file.c_str());
     }
   }
   std::string unique_file(const std::string &location, bool keep = false) {
diff --git a/libminifi/include/utils/file/FileUtils.h b/libminifi/include/utils/file/FileUtils.h
index ebd2d07..7c90d43 100644
--- a/libminifi/include/utils/file/FileUtils.h
+++ b/libminifi/include/utils/file/FileUtils.h
@@ -710,6 +710,22 @@ class FileUtils {
     return get_parent_path(executable_path);
   }
 
+  static int close(int file_descriptor) {
+#ifdef WIN32
+    return _close(file_descriptor);
+#else
+    return ::close(file_descriptor);
+#endif
+  }
+
+  static int access(const char *path_name, int mode) {
+#ifdef WIN32
+    return _access(path_name, mode);
+#else
+    return ::access(path_name, mode);
+#endif
+  }
+
 #ifdef WIN32
   static std::error_code hide_file(const char* const file_name) {
     const bool success = SetFileAttributesA(file_name, FILE_ATTRIBUTE_HIDDEN);
diff --git a/libminifi/src/FlowControlProtocol.cpp b/libminifi/src/FlowControlProtocol.cpp
index 2b174a8..4dafd24 100644
--- a/libminifi/src/FlowControlProtocol.cpp
+++ b/libminifi/src/FlowControlProtocol.cpp
@@ -79,7 +79,9 @@ int FlowControlProtocol::readData(uint8_t *buf, int buflen) {
     if (status <= 0) {
       return status;
     }
-#ifndef __MACH__
+#ifdef WIN32
+    status = _read(_socket, buf, buflen);
+#elif !defined(__MACH__)
     status = read(_socket, buf, buflen);
 #else
     status = recv(_socket, buf, buflen, 0);
@@ -194,7 +196,7 @@ int FlowControlProtocol::sendRegisterReq() {
   int status = sendData(buffer.data(), size);
   buffer.clear();
   if (status <= 0) {
-    close(_socket);
+    utils::file::FileUtils::close(_socket);
     _socket = 0;
     logger_->log_error("Flow Control Protocol Send Register Req failed");
     return -1;
@@ -204,7 +206,7 @@ int FlowControlProtocol::sendRegisterReq() {
   status = readHdr(&hdr);
 
   if (status <= 0) {
-    close(_socket);
+    utils::file::FileUtils::close(_socket);
     _socket = 0;
     logger_->log_error("Flow Control Protocol Read Register Resp header failed");
     return -1;
@@ -224,7 +226,7 @@ int FlowControlProtocol::sendRegisterReq() {
     status = readData(payload.data(), hdr.payloadLen);
     if (status <= 0) {
       logger_->log_warn("Flow Control Protocol Register Read Payload fail");
-      close(_socket);
+      utils::file::FileUtils::close(_socket);
       _socket = 0;
       return -1;
     }
@@ -241,12 +243,12 @@ int FlowControlProtocol::sendRegisterReq() {
         break;
       }
     }
-    close(_socket);
+    utils::file::FileUtils::close(_socket);
     _socket = 0;
     return 0;
   } else {
     logger_->log_warn("Flow Control Protocol Register fail");
-    close(_socket);
+    utils::file::FileUtils::close(_socket);
     _socket = 0;
     return -1;
   }
@@ -288,7 +290,7 @@ int FlowControlProtocol::sendReportReq() {
   int status = sendData(buffer.data(), size);
   buffer.clear();
   if (status <= 0) {
-    close(_socket);
+    utils::file::FileUtils::close(_socket);
     _socket = 0;
     logger_->log_error("Flow Control Protocol Send Report Req failed");
     return -1;
@@ -298,7 +300,7 @@ int FlowControlProtocol::sendReportReq() {
   status = readHdr(&hdr);
 
   if (status <= 0) {
-    close(_socket);
+    utils::file::FileUtils::close(_socket);
     _socket = 0;
     logger_->log_error("Flow Control Protocol Read Report Resp header failed");
     return -1;
@@ -316,7 +318,7 @@ int FlowControlProtocol::sendReportReq() {
     status = readData(payload.data(), hdr.payloadLen);
     if (status <= 0) {
       logger_->log_warn("Flow Control Protocol Report Resp Read Payload fail");
-      close(_socket);
+      utils::file::FileUtils::close(_socket);
       _socket = 0;
       return -1;
     }
@@ -349,33 +351,33 @@ int FlowControlProtocol::sendReportReq() {
         break;
       }
     }
-    close(_socket);
+    utils::file::FileUtils::close(_socket);
     _socket = 0;
     return 0;
   } else if (hdr.status == RESP_TRIGGER_REGISTER && hdr.seqNumber == this->_seqNumber) {
     logger_->log_trace("Flow Control Protocol trigger reregister");
     this->_registered = false;
     this->_seqNumber++;
-    close(_socket);
+    utils::file::FileUtils::close(_socket);
     _socket = 0;
     return 0;
   } else if (hdr.status == RESP_STOP_FLOW_CONTROLLER && hdr.seqNumber == this->_seqNumber) {
     logger_->log_trace("Flow Control Protocol stop flow controller");
     this->_controller->stop(true);
     this->_seqNumber++;
-    close(_socket);
+    utils::file::FileUtils::close(_socket);
     _socket = 0;
     return 0;
   } else if (hdr.status == RESP_START_FLOW_CONTROLLER && hdr.seqNumber == this->_seqNumber) {
     logger_->log_trace("Flow Control Protocol start flow controller");
     this->_controller->start();
     this->_seqNumber++;
-    close(_socket);
+    utils::file::FileUtils::close(_socket);
     _socket = 0;
     return 0;
   } else {
     logger_->log_trace("Flow Control Protocol Report fail");
-    close(_socket);
+    utils::file::FileUtils::close(_socket);
     _socket = 0;
     return -1;
   }
diff --git a/libminifi/src/RemoteProcessorGroupPort.cpp b/libminifi/src/RemoteProcessorGroupPort.cpp
index b945396..4607a7e 100644
--- a/libminifi/src/RemoteProcessorGroupPort.cpp
+++ b/libminifi/src/RemoteProcessorGroupPort.cpp
@@ -273,7 +273,7 @@ void RemoteProcessorGroupPort::onTrigger(const std::shared_ptr<core::ProcessCont
 
     returnProtocol(std::move(protocol_));
     return;
-  } catch (const minifi::Exception &ex2) {
+  } catch (const minifi::Exception &) {
     context->yield();
     session->rollback();
   } catch (...) {
diff --git a/libminifi/src/c2/C2Agent.cpp b/libminifi/src/c2/C2Agent.cpp
index 48617e8..9b46323 100644
--- a/libminifi/src/c2/C2Agent.cpp
+++ b/libminifi/src/c2/C2Agent.cpp
@@ -18,6 +18,7 @@
 
 #include "c2/C2Agent.h"
 
+#include <cstdio>
 #include <csignal>
 #include <utility>
 #include <limits>
@@ -37,6 +38,7 @@
 #include "utils/file/FileManager.h"
 #include "utils/GeneralUtils.h"
 #include "utils/HTTPClient.h"
+#include "utils/Environment.h"
 #include "utils/Monitors.h"
 
 namespace org {
@@ -223,7 +225,7 @@ void C2Agent::configure(const std::shared_ptr<Configure> &configure, bool reconf
       } else {
         heart_beat_period_ = std::stoi(heartbeat_period);
       }
-    } catch (const std::invalid_argument &ie) {
+    } catch (const std::invalid_argument &) {
       heart_beat_period_ = 3000;
     }
   } else {
@@ -238,25 +240,20 @@ void C2Agent::configure(const std::shared_ptr<Configure> &configure, bool reconf
 
   if (allow_updates_) {
     if (!configure->get("nifi.c2.agent.update.command", "c2.agent.update.command", update_command_)) {
-      char cwd[1024];
-      if (getcwd(cwd, sizeof(cwd)) == nullptr) {
-        logger_->log_error("Could not set update command, reason %s", std::strerror(errno));
-
+      std::string cwd = utils::Environment::getCurrentWorkingDirectory();
+      if (cwd.empty()) {
+        logger_->log_error("Could not set the update command because the working directory could not be determined");
       } else {
-        std::stringstream command;
-        command << cwd << "/minifi.sh update";
-        update_command_ = command.str();
+        update_command_ = cwd + "/minifi.sh update";
       }
     }
 
     if (!configure->get("nifi.c2.agent.update.temp.location", "c2.agent.update.temp.location", update_location_)) {
-      char cwd[1024];
-      if (getcwd(cwd, sizeof(cwd)) == nullptr) {
-        logger_->log_error("Could not set copy path, reason %s", std::strerror(errno));
+      std::string cwd = utils::Environment::getCurrentWorkingDirectory();
+      if (cwd.empty()) {
+        logger_->log_error("Could not set the update location because the working directory could not be determined");
       } else {
-        std::stringstream copy_path;
-        std::stringstream command;
-        copy_path << cwd << "/minifi.update";
+        update_location_ = cwd + "/minifi.update";
       }
     }
 
@@ -679,7 +676,7 @@ void C2Agent::handle_update(const C2ContentResponse &resp) {
 
       std::ifstream new_conf(file_path);
       std::string raw_data_str((std::istreambuf_iterator<char>(new_conf)), std::istreambuf_iterator<char>());
-      unlink(file_path.c_str());
+      std::remove(file_path.c_str());
       // if we can apply the update, we will acknowledge it and then backup the configuration file.
       if (update_sink_->applyUpdate(urlStr, raw_data_str)) {
         C2Payload response(Operation::ACKNOWLEDGE, state::UpdateState::FULLY_APPLIED, resp.ident, false, true);
@@ -832,7 +829,7 @@ void C2Agent::handle_update(const C2ContentResponse &resp) {
         }
         // remove the downloaded file.
         logger_->log_trace("removing file %s", file_path);
-        unlink(file_path.c_str());
+        std::remove(file_path.c_str());
         update_agent();
       } else {
         logger_->log_trace("Update disallowed from file %s", file_path);
@@ -862,15 +859,14 @@ bool C2Agent::update_property(const std::string &property_name, const std::strin
 }
 
 void C2Agent::restart_agent() {
-  char cwd[1024];
-  if (getcwd(cwd, sizeof(cwd)) == nullptr) {
-    logger_->log_error("Could not restart agent, reason %s", std::strerror(errno));
+  std::string cwd = utils::Environment::getCurrentWorkingDirectory();
+  if (cwd.empty()) {
+    logger_->log_error("Could not restart the agent because the working directory could not be determined");
     return;
   }
 
-  std::stringstream command;
-  command << cwd << "/bin/minifi.sh restart";
-  system(command.str().c_str());
+  std::string command = cwd + "/bin/minifi.sh restart";
+  system(command.c_str());
 }
 
 void C2Agent::update_agent() {
diff --git a/libminifi/src/c2/ControllerSocketProtocol.cpp b/libminifi/src/c2/ControllerSocketProtocol.cpp
index 83f77c5..ab8e364 100644
--- a/libminifi/src/c2/ControllerSocketProtocol.cpp
+++ b/libminifi/src/c2/ControllerSocketProtocol.cpp
@@ -183,7 +183,7 @@ void ControllerSocketProtocol::initialize(const std::shared_ptr<core::controller
           } else if (what == "components") {
             io::BaseStream resp;
             resp.writeData(&head, 1);
-            uint16_t size = update_sink_->getAllComponents().size();
+            uint16_t size = gsl::narrow<uint16_t>(update_sink_->getAllComponents().size());
             resp.write(size);
             for (const auto &component : update_sink_->getAllComponents()) {
               resp.writeUTF(component->getComponentName());
@@ -209,7 +209,7 @@ void ControllerSocketProtocol::initialize(const std::shared_ptr<core::controller
           } else if (what == "connections") {
             io::BaseStream resp;
             resp.writeData(&head, 1);
-            uint16_t size = queue_full_.size();
+            uint16_t size = gsl::narrow<uint16_t>(queue_full_.size());
             resp.write(size);
             for (const auto &connection : queue_full_) {
               resp.writeUTF(connection.first, false);
@@ -227,7 +227,7 @@ void ControllerSocketProtocol::initialize(const std::shared_ptr<core::controller
             }
             io::BaseStream resp;
             resp.writeData(&head, 1);
-            uint16_t full_connection_count = full_connections.size();
+            uint16_t full_connection_count = gsl::narrow<uint16_t>(full_connections.size());
             resp.write(full_connection_count);
             for (auto conn : full_connections) {
               resp.writeUTF(conn);
diff --git a/libminifi/src/controllers/NetworkPrioritizerService.cpp b/libminifi/src/controllers/NetworkPrioritizerService.cpp
index 5df8af2..32d23f9 100644
--- a/libminifi/src/controllers/NetworkPrioritizerService.cpp
+++ b/libminifi/src/controllers/NetworkPrioritizerService.cpp
@@ -156,11 +156,11 @@ std::vector<std::string> NetworkPrioritizerService::getInterfaces(uint32_t size
 
 bool NetworkPrioritizerService::sufficient_tokens(uint32_t size) {
   std::lock_guard<std::mutex> lock(token_mutex_);
-  auto ms = std::chrono::system_clock::now().time_since_epoch() / std::chrono::milliseconds(1);
+  auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
   auto diff = ms - timestamp_;
   timestamp_ = ms;
   if (diff > 0) {
-    tokens_ += diff * tokens_per_ms;
+    tokens_ += gsl::narrow<uint32_t>(diff * tokens_per_ms);
   }
   if (bytes_per_token_ > 0 && size > 0) {
     if (tokens_ * bytes_per_token_ >= size) {
@@ -197,9 +197,9 @@ void NetworkPrioritizerService::onEnable() {
       logger_->log_trace("Max throughput is %d", max_throughput_);
       if (max_throughput_ < 1000) {
         bytes_per_token_ = 1;
-        tokens_ = max_throughput_;
+        tokens_ = gsl::narrow<uint32_t>(max_throughput_);
       } else {
-        bytes_per_token_ = max_throughput_ / 1000;
+        bytes_per_token_ = gsl::narrow<uint32_t>(max_throughput_ / 1000);
       }
     }
 
diff --git a/libminifi/src/core/ConfigurationFactory.cpp b/libminifi/src/core/ConfigurationFactory.cpp
index f82fd16..0f12e92 100644
--- a/libminifi/src/core/ConfigurationFactory.cpp
+++ b/libminifi/src/core/ConfigurationFactory.cpp
@@ -57,7 +57,7 @@ std::unique_ptr<core::FlowConfiguration> createFlowConfiguration(std::shared_ptr
         throw std::runtime_error("Support for the provided configuration class could not be found");
       }
     }
-  } catch (const std::runtime_error &r) {
+  } catch (const std::runtime_error &) {
     if (fail_safe) {
       return std::unique_ptr<core::FlowConfiguration>(new core::FlowConfiguration(repo, flow_file_repo, content_repo, stream_factory, configure, path));
     }
diff --git a/libminifi/src/core/ProcessGroup.cpp b/libminifi/src/core/ProcessGroup.cpp
index 28e6c9a..150a3d6 100644
--- a/libminifi/src/core/ProcessGroup.cpp
+++ b/libminifi/src/core/ProcessGroup.cpp
@@ -431,7 +431,7 @@ void ProcessGroup::drainConnections() {
 std::size_t ProcessGroup::getTotalFlowFileCount() const {
   std::size_t sum = 0;
   for (auto& conn : connections_) {
-    sum += conn->getQueueSize();
+    sum += gsl::narrow<std::size_t>(conn->getQueueSize());
   }
 
   for (const ProcessGroup* childGroup : child_process_groups_) {
diff --git a/libminifi/src/core/ProcessSession.cpp b/libminifi/src/core/ProcessSession.cpp
index e14d812..5925865 100644
--- a/libminifi/src/core/ProcessSession.cpp
+++ b/libminifi/src/core/ProcessSession.cpp
@@ -434,7 +434,7 @@ void ProcessSession::import(std::string source, const std::shared_ptr<core::Flow
             break;
           }
         } else {
-          if (stream->write(reinterpret_cast<uint8_t*>(charBuffer.data()), input.gcount()) < 0) {
+          if (stream->write(reinterpret_cast<uint8_t*>(charBuffer.data()), gsl::narrow<int>(input.gcount())) < 0) {
             invalidWrite = true;
             break;
           }
@@ -584,12 +584,17 @@ void ProcessSession::import(std::string source, std::vector<std::shared_ptr<Flow
 #elif defined(__GNUC__)
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#elif defined(WIN32)
+#pragma warning(push)
+#pragma warning(disable: 4996)
 #endif
   import(source, flows, offset, inputDelimiter);
 #if defined(__clang__)
 #pragma clang diagnostic pop
 #elif defined(__GNUC__)
 #pragma GCC diagnostic pop
+#elif defined(WIN32)
+#pragma warning(pop)
 #endif
   logger_->log_trace("Closed input %s, keeping source ? %i", source, keepSource);
   if (!keepSource) {
diff --git a/libminifi/src/core/ProcessSessionReadCallback.cpp b/libminifi/src/core/ProcessSessionReadCallback.cpp
index 8bff56a..b902009 100644
--- a/libminifi/src/core/ProcessSessionReadCallback.cpp
+++ b/libminifi/src/core/ProcessSessionReadCallback.cpp
@@ -18,6 +18,7 @@
  * limitations under the License.
  */
 #include "core/ProcessSessionReadCallback.h"
+#include <cstdio>
 #include <memory>
 #include <string>
 
@@ -88,7 +89,7 @@ ProcessSessionReadCallback::~ProcessSessionReadCallback() {
   _tmpFileOs.close();
 
   // Clean up tmp file, if necessary
-  unlink(_tmpFile.c_str());
+  std::remove(_tmpFile.c_str());
 }
 
 }  // namespace core
diff --git a/libminifi/src/core/RepositoryFactory.cpp b/libminifi/src/core/RepositoryFactory.cpp
index 82ed53a..2f82b8e 100644
--- a/libminifi/src/core/RepositoryFactory.cpp
+++ b/libminifi/src/core/RepositoryFactory.cpp
@@ -65,7 +65,7 @@ std::shared_ptr<core::Repository> createRepository(const std::string configurati
     } else {
       throw std::runtime_error("Support for the provided configuration class could not be found");
     }
-  } catch (const std::runtime_error &r) {
+  } catch (const std::runtime_error &) {
     if (fail_safe) {
       return std::make_shared<core::Repository>("fail_safe", "fail_safe", 1, 1, 1);
     }
@@ -98,7 +98,7 @@ std::shared_ptr<core::ContentRepository> createContentRepository(const std::stri
     } else {
       throw std::runtime_error("Support for the provided configuration class could not be found");
     }
-  } catch (const std::runtime_error &r) {
+  } catch (const std::runtime_error &) {
     if (fail_safe) {
       return std::make_shared<core::repository::VolatileContentRepository>("fail_safe");
     }
diff --git a/libminifi/src/core/logging/LoggerConfiguration.cpp b/libminifi/src/core/logging/LoggerConfiguration.cpp
index 3164d86..ae9c2fa 100644
--- a/libminifi/src/core/logging/LoggerConfiguration.cpp
+++ b/libminifi/src/core/logging/LoggerConfiguration.cpp
@@ -167,8 +167,8 @@ std::shared_ptr<internal::LoggerNamespace> LoggerConfiguration::initialize_names
       if (logger_properties->get(appender_key + ".max_files", max_files_str)) {
         try {
           max_files = std::stoi(max_files_str);
-        } catch (const std::invalid_argument &ia) {
-        } catch (const std::out_of_range &oor) {
+        } catch (const std::invalid_argument &) {
+        } catch (const std::out_of_range &) {
         }
       }
 
@@ -177,8 +177,8 @@ std::shared_ptr<internal::LoggerNamespace> LoggerConfiguration::initialize_names
       if (logger_properties->get(appender_key + ".max_file_size", max_file_size_str)) {
         try {
           max_file_size = std::stoi(max_file_size_str);
-        } catch (const std::invalid_argument &ia) {
-        } catch (const std::out_of_range &oor) {
+        } catch (const std::invalid_argument &) {
+        } catch (const std::out_of_range &) {
         }
       }
       sink_map[appender_name] = std::make_shared<spdlog::sinks::rotating_file_sink_mt>(file_name, max_file_size, max_files);
@@ -288,7 +288,7 @@ std::shared_ptr<spdlog::logger> LoggerConfiguration::get_logger(std::shared_ptr<
   spdlogger->flush_on(std::max(spdlog::level::info, current_namespace->level));
   try {
     spdlog::register_logger(spdlogger);
-  } catch (const spdlog::spdlog_ex &ex) {
+  } catch (const spdlog::spdlog_ex &) {
     // Ignore as someone else beat us to registration, we should get the one they made below
   }
   return spdlog::get(name);
diff --git a/libminifi/src/core/yaml/YamlConfiguration.cpp b/libminifi/src/core/yaml/YamlConfiguration.cpp
index 95c2271..088c041 100644
--- a/libminifi/src/core/yaml/YamlConfiguration.cpp
+++ b/libminifi/src/core/yaml/YamlConfiguration.cpp
@@ -454,7 +454,7 @@ void YamlConfiguration::parseProvenanceReportingYaml(YAML::Node *reportNode, cor
   reportTask->setPortUUID(port_uuid);
 
   if (core::Property::StringToInt(batchSizeStr, lvalue)) {
-    reportTask->setBatchSize(lvalue);
+    reportTask->setBatchSize(gsl::narrow<int>(lvalue));
   }
 
   reportTask->initialize();
@@ -479,7 +479,7 @@ void YamlConfiguration::parseControllerServices(YAML::Node *controllerServicesNo
           try {
             checkRequiredField(&controllerServiceNode, "class", CONFIG_YAML_CONTROLLER_SERVICES_KEY);
             type = controllerServiceNode["class"].as<std::string>();
-          } catch (const std::invalid_argument &e) {
+          } catch (const std::invalid_argument &) {
             checkRequiredField(&controllerServiceNode, "type", CONFIG_YAML_CONTROLLER_SERVICES_KEY);
             type = controllerServiceNode["type"].as<std::string>();
             logger_->log_debug("Using type %s for controller service node", type);
@@ -514,7 +514,7 @@ void YamlConfiguration::parseControllerServices(YAML::Node *controllerServicesNo
           }
           controller_services_->put(id, controller_service_node);
           controller_services_->put(name, controller_service_node);
-        } catch (YAML::InvalidNode &in) {
+        } catch (YAML::InvalidNode &) {
           throw Exception(ExceptionType::GENERAL_EXCEPTION, "Name, id, and class must be specified for controller services");
         }
       }
diff --git a/libminifi/src/io/ClientSocket.cpp b/libminifi/src/io/ClientSocket.cpp
index 6c70037..ffdae03 100644
--- a/libminifi/src/io/ClientSocket.cpp
+++ b/libminifi/src/io/ClientSocket.cpp
@@ -39,6 +39,7 @@
 #include <utils/Deleters.h>
 #include "io/validation.h"
 #include "core/logging/LoggerConfiguration.h"
+#include "utils/file/FileUtils.h"
 #include "utils/GeneralUtils.h"
 
 namespace util = org::apache::nifi::minifi::utils;
@@ -226,11 +227,11 @@ void Socket::closeStream() {
     socket_file_descriptor_ = INVALID_SOCKET;
   }
   if (total_written_ > 0) {
-    local_network_interface_.log_write(total_written_);
+    local_network_interface_.log_write(gsl::narrow<uint32_t>(total_written_.load()));
     total_written_ = 0;
   }
   if (total_read_ > 0) {
-    local_network_interface_.log_read(total_read_);
+    local_network_interface_.log_read(gsl::narrow<uint32_t>(total_read_.load()));
     total_read_ = 0;
   }
 }
@@ -512,7 +513,7 @@ int Socket::writeData(uint8_t *value, int size) {
     ret = send(fd, reinterpret_cast<const char*>(value) + bytes, size - bytes, 0);
     // check for errors
     if (ret <= 0) {
-      close(fd);
+      utils::file::FileUtils::close(fd);
       logger_->log_error("Could not send to %d, error: %s", fd, get_last_socket_error_message());
       return ret;
     }
@@ -609,7 +610,7 @@ int Socket::readData(uint8_t *buf, int buflen, bool retrieve_all_bytes) {
     if (fd < 0) {
       if (listeners_ <= 0) {
         logger_->log_debug("fd %d close %i", fd, buflen);
-        close(socket_file_descriptor_);
+        utils::file::FileUtils::close(socket_file_descriptor_);
       }
       return -1;
     }
diff --git a/libminifi/src/io/DescriptorStream.cpp b/libminifi/src/io/DescriptorStream.cpp
index f77f5a1..549c1b5 100644
--- a/libminifi/src/io/DescriptorStream.cpp
+++ b/libminifi/src/io/DescriptorStream.cpp
@@ -36,7 +36,11 @@ DescriptorStream::DescriptorStream(int fd)
 
 void DescriptorStream::seek(uint64_t offset) {
   std::lock_guard<std::recursive_mutex> lock(file_lock_);
-  lseek(fd_, offset, 0x00);
+#ifdef WIN32
+  _lseeki64(fd_, gsl::narrow<int64_t>(offset), 0x00);
+#else
+  lseek(fd_, gsl::narrow<off_t>(offset), 0x00);
+#endif
 }
 
 int DescriptorStream::writeData(std::vector<uint8_t> &buf, int buflen) {
@@ -55,7 +59,11 @@ int DescriptorStream::writeData(std::vector<uint8_t> &buf, int buflen) {
 int DescriptorStream::writeData(uint8_t *value, int size) {
   if (!IsNullOrEmpty(value)) {
     std::lock_guard<std::recursive_mutex> lock(file_lock_);
+#ifdef WIN32
+    if (_write(fd_, value, size) != size) {
+#else
     if (::write(fd_, value, size) != size) {
+#endif
       return -1;
     } else {
       return size;
@@ -96,7 +104,11 @@ int DescriptorStream::readData(std::vector<uint8_t> &buf, int buflen) {
 
 int DescriptorStream::readData(uint8_t *buf, int buflen) {
   if (!IsNullOrEmpty(buf)) {
+#ifdef WIN32
+    auto size_read = _read(fd_, buf, buflen);
+#else
     auto size_read = ::read(fd_, buf, buflen);
+#endif
 
     if (size_read < 0) {
       return -1;
diff --git a/libminifi/src/io/FileStream.cpp b/libminifi/src/io/FileStream.cpp
index 0fe80aa..1d79469 100644
--- a/libminifi/src/io/FileStream.cpp
+++ b/libminifi/src/io/FileStream.cpp
@@ -40,9 +40,9 @@ FileStream::FileStream(const std::string &path, bool append)
     file_stream_->open(path.c_str(), std::fstream::out | std::fstream::binary);
   file_stream_->seekg(0, file_stream_->end);
   file_stream_->seekp(0, file_stream_->end);
-  int len = file_stream_->tellg();
+  std::streamoff len = file_stream_->tellg();
   if (len > 0) {
-    length_ = len;
+    length_ = gsl::narrow<size_t>(len);
   } else {
     length_ = 0;
   }
@@ -61,9 +61,9 @@ FileStream::FileStream(const std::string &path, uint32_t offset, bool write_enab
   }
   file_stream_->seekg(0, file_stream_->end);
   file_stream_->seekp(0, file_stream_->end);
-  int len = file_stream_->tellg();
+  std::streamoff len = file_stream_->tellg();
   if (len > 0) {
-    length_ = len;
+    length_ = gsl::narrow<size_t>(len);
   } else {
     length_ = 0;
   }
@@ -80,7 +80,7 @@ void FileStream::closeStream() {
 
 void FileStream::seek(uint64_t offset) {
   std::lock_guard<std::recursive_mutex> lock(file_lock_);
-  offset_ = offset;
+  offset_ = gsl::narrow<size_t>(offset);
   file_stream_->clear();
   file_stream_->seekg(offset_);
   file_stream_->seekp(offset_);
@@ -158,12 +158,12 @@ int FileStream::readData(uint8_t *buf, int buflen) {
       file_stream_->clear();
       file_stream_->seekg(0, file_stream_->end);
       file_stream_->seekp(0, file_stream_->end);
-      int len = file_stream_->tellg();
+      size_t len = gsl::narrow<size_t>(file_stream_->tellg());
       size_t ret = len - offset_;
       offset_ = len;
       length_ = len;
       logging::LOG_DEBUG(logger_) << path_ << " eof bit, ended at " << offset_;
-      return ret;
+      return gsl::narrow<int>(ret);
     } else {
       offset_ += buflen;
       file_stream_->seekp(offset_);
diff --git a/libminifi/src/io/ServerSocket.cpp b/libminifi/src/io/ServerSocket.cpp
index bc24f9a..183a9e0 100644
--- a/libminifi/src/io/ServerSocket.cpp
+++ b/libminifi/src/io/ServerSocket.cpp
@@ -32,6 +32,7 @@
 #include <string>
 #include "io/validation.h"
 #include "core/logging/LoggerConfiguration.h"
+#include "utils/file/FileUtils.h"
 
 namespace org {
 namespace apache {
@@ -71,7 +72,7 @@ void ServerSocket::registerCallback(std::function<bool()> accept_function, std::
 
 void ServerSocket::close_fd(int fd) {
   std::lock_guard<std::recursive_mutex> guard(selection_mutex_);
-  close(fd);
+  utils::file::FileUtils::close(fd);
   FD_CLR(fd, &total_list_);
 }
 
diff --git a/libminifi/src/io/tls/SecureDescriptorStream.cpp b/libminifi/src/io/tls/SecureDescriptorStream.cpp
index 3965d0a..8b1edac 100644
--- a/libminifi/src/io/tls/SecureDescriptorStream.cpp
+++ b/libminifi/src/io/tls/SecureDescriptorStream.cpp
@@ -36,7 +36,11 @@ SecureDescriptorStream::SecureDescriptorStream(int fd, SSL *ssl)
 
 void SecureDescriptorStream::seek(uint64_t offset) {
   std::lock_guard<std::recursive_mutex> lock(file_lock_);
-  lseek(fd_, offset, 0x00);
+#ifdef WIN32
+  _lseeki64(fd_, gsl::narrow<int64_t>(offset), 0x00);
+#else
+  lseek(fd_, gsl::narrow<off_t>(offset), 0x00);
+#endif
 }
 
 int SecureDescriptorStream::writeData(std::vector<uint8_t> &buf, int buflen) {
diff --git a/libminifi/src/sitetosite/Peer.cpp b/libminifi/src/sitetosite/Peer.cpp
index 5505b0c..9859659 100644
--- a/libminifi/src/sitetosite/Peer.cpp
+++ b/libminifi/src/sitetosite/Peer.cpp
@@ -54,7 +54,7 @@ bool SiteToSitePeer::Open() {
   if (stream_->initialize() < 0)
     return false;
 
-  uint16_t data_size = sizeof MAGIC_BYTES;
+  int data_size = gsl::narrow<int>(sizeof MAGIC_BYTES);
 
   if (stream_->writeData(reinterpret_cast<uint8_t *>(const_cast<char*>(MAGIC_BYTES)), data_size) != data_size) {
     return false;
diff --git a/libminifi/src/sitetosite/RawSocketProtocol.cpp b/libminifi/src/sitetosite/RawSocketProtocol.cpp
index 355fc42..f17241e 100644
--- a/libminifi/src/sitetosite/RawSocketProtocol.cpp
+++ b/libminifi/src/sitetosite/RawSocketProtocol.cpp
@@ -376,7 +376,7 @@ bool RawSiteToSiteClient::getPeerList(std::vector<PeerStatus> &peers) {
         tearDown();
         return false;
       }
-      PeerStatus status(std::make_shared<Peer>(port_id_, host, port, secure), count, true);
+      PeerStatus status(std::make_shared<Peer>(port_id_, host, gsl::narrow<uint16_t>(port), secure != 0), count, true);
       peers.push_back(std::move(status));
       logging::LOG_TRACE(logger_) << "Site2Site Peer host " << host << " port " << port << " Secure " << std::to_string(secure);
     }
diff --git a/libminifi/src/sitetosite/SiteToSiteClient.cpp b/libminifi/src/sitetosite/SiteToSiteClient.cpp
index 056fd9e..40af602 100644
--- a/libminifi/src/sitetosite/SiteToSiteClient.cpp
+++ b/libminifi/src/sitetosite/SiteToSiteClient.cpp
@@ -499,8 +499,9 @@ int16_t SiteToSiteClient::send(std::string transactionID, DataPacket *packet, co
       return -1;
     }
 
-    ret = transaction->getStream().writeData(reinterpret_cast<uint8_t *>(const_cast<char*>(packet->payload_.c_str())), len);
-    if (ret != (int64_t)len) {
+    ret = transaction->getStream().writeData(reinterpret_cast<uint8_t *>(const_cast<char*>(packet->payload_.c_str())),
+                                             gsl::narrow<int>(len));
+    if (ret != gsl::narrow<int64_t>(len)) {
       logger_->log_debug("Failed to write payload size!");
       return -1;
     }
diff --git a/libminifi/src/utils/file/FileUtils.cpp b/libminifi/src/utils/file/FileUtils.cpp
index a010cd7..b02c8e3 100644
--- a/libminifi/src/utils/file/FileUtils.cpp
+++ b/libminifi/src/utils/file/FileUtils.cpp
@@ -35,13 +35,13 @@ uint64_t FileUtils::computeChecksum(const std::string &file_name, uint64_t up_to
 
   std::ifstream stream{file_name, std::ios::in | std::ios::binary};
 
-  uint64_t checksum = 0;
+  uLong checksum = 0;
   uint64_t remaining_bytes_to_be_read = up_to_position;
 
   while (stream && remaining_bytes_to_be_read > 0) {
     // () around std::min are needed because Windows.h defines min (and max) as a macro
     stream.read(buffer.data(), (std::min)(BUFFER_SIZE, remaining_bytes_to_be_read));
-    uint64_t bytes_read = stream.gcount();
+    uInt bytes_read = gsl::narrow<uInt>(stream.gcount());
     checksum = crc32(checksum, reinterpret_cast<unsigned char*>(buffer.data()), bytes_read);
     remaining_bytes_to_be_read -= bytes_read;
   }
diff --git a/libminifi/test/TestBase.cpp b/libminifi/test/TestBase.cpp
index 2dd8a36..6f415eb 100644
--- a/libminifi/test/TestBase.cpp
+++ b/libminifi/test/TestBase.cpp
@@ -219,7 +219,7 @@ std::shared_ptr<core::controller::ControllerServiceNode> TestPlan::addController
 
 bool TestPlan::setProperty(const std::shared_ptr<core::Processor> proc, const std::string &prop, const std::string &value, bool dynamic) {
   std::lock_guard<std::recursive_mutex> guard(mutex);
-  int32_t i = 0;
+  size_t i = 0;
   logger_->log_info("Attempting to set property %s %s for %s", prop, value, proc->getName());
   for (i = 0; i < processor_queue_.size(); i++) {
     if (processor_queue_.at(i) == proc) {
@@ -227,7 +227,7 @@ bool TestPlan::setProperty(const std::shared_ptr<core::Processor> proc, const st
     }
   }
 
-  if (i >= processor_queue_.size() || i < 0 || i >= processor_contexts_.size()) {
+  if (i >= processor_queue_.size() || i >= processor_contexts_.size()) {
     return false;
   }
 
@@ -289,7 +289,7 @@ bool TestPlan::runNextProcessor(std::function<void(const std::shared_ptr<core::P
     processor->onTrigger(context, current_session);
   }
   current_session->commit();
-  return location + 1 < processor_queue_.size();
+  return gsl::narrow<size_t>(location + 1) < processor_queue_.size();
 }
 
 bool TestPlan::runCurrentProcessor(std::function<void(const std::shared_ptr<core::ProcessContext>, const std::shared_ptr<core::ProcessSession>)> verify) {
@@ -313,7 +313,7 @@ bool TestPlan::runCurrentProcessor(std::function<void(const std::shared_ptr<core
     processor->onTrigger(context, current_session);
   }
   current_session->commit();
-  return location + 1 < processor_queue_.size();
+  return gsl::narrow<size_t>(location + 1) < processor_queue_.size();
 }
 
 std::set<std::shared_ptr<provenance::ProvenanceEventRecord>> TestPlan::getProvenanceRecords() {
diff --git a/libminifi/test/archive-tests/CompressContentTests.cpp b/libminifi/test/archive-tests/CompressContentTests.cpp
index 45b55ca..bb31681 100644
--- a/libminifi/test/archive-tests/CompressContentTests.cpp
+++ b/libminifi/test/archive-tests/CompressContentTests.cpp
@@ -43,7 +43,7 @@
 
 class ReadCallback: public org::apache::nifi::minifi::InputStreamCallback {
  public:
-  explicit ReadCallback(uint64_t size) :
+  explicit ReadCallback(size_t size) :
       read_size_(0) {
     buffer_size_ = size;
     buffer_ = new uint8_t[buffer_size_];
@@ -60,10 +60,10 @@ class ReadCallback: public org::apache::nifi::minifi::InputStreamCallback {
     int64_t total_read = 0;
     int64_t ret = 0;
     do {
-      ret = stream->read(buffer_ + read_size_, buffer_size_ - read_size_);
+      ret = stream->read(buffer_ + read_size_, gsl::narrow<int>(buffer_size_ - read_size_));
       if (ret == 0) break;
       if (ret < 0) return ret;
-      read_size_ += ret;
+      read_size_ += gsl::narrow<size_t>(ret);
       total_read += ret;
     } while (buffer_size_ != read_size_);
     return total_read;
@@ -77,7 +77,7 @@ class ReadCallback: public org::apache::nifi::minifi::InputStreamCallback {
     struct archive_entry *ae;
 
     REQUIRE(archive_read_next_header(a, &ae) == ARCHIVE_OK);
-    int size = archive_entry_size(ae);
+    int size = gsl::narrow<int>(archive_entry_size(ae));
     archive_buffer_ = new char[size];
     archive_buffer_size_ = size;
     archive_read_data(a, archive_buffer_, size);
@@ -85,8 +85,8 @@ class ReadCallback: public org::apache::nifi::minifi::InputStreamCallback {
   }
 
   uint8_t *buffer_;
-  uint64_t buffer_size_;
-  uint64_t read_size_;
+  size_t buffer_size_;
+  size_t read_size_;
   char *archive_buffer_;
   int archive_buffer_size_;
 };
@@ -267,7 +267,7 @@ TEST_CASE("CompressFileGZip", "[compressfiletest1]") {
     std::string mime;
     flow1->getAttribute(FlowAttributeKey(org::apache::nifi::minifi::MIME_TYPE), mime);
     REQUIRE(mime == "application/gzip");
-    ReadCallback callback(flow1->getSize());
+    ReadCallback callback(gsl::narrow<size_t>(flow1->getSize()));
     sessionGenFlowFile.read(flow1, &callback);
     callback.archive_read();
     std::string content(reinterpret_cast<char *> (callback.archive_buffer_), callback.archive_buffer_size_);
@@ -310,7 +310,7 @@ TEST_CASE("DecompressFileGZip", "[compressfiletest2]") {
     REQUIRE(flow1->getSize() != flow->getSize());
     std::string mime;
     REQUIRE(flow1->getAttribute(FlowAttributeKey(org::apache::nifi::minifi::MIME_TYPE), mime) == false);
-    ReadCallback callback(flow1->getSize());
+    ReadCallback callback(gsl::narrow<size_t>(flow1->getSize()));
     sessionGenFlowFile.read(flow1, &callback);
     std::string content(reinterpret_cast<char *> (callback.buffer_), callback.read_size_);
     REQUIRE(testController.getRawContent() == content);
@@ -351,7 +351,7 @@ TEST_CASE("CompressFileBZip", "[compressfiletest3]") {
     std::string mime;
     flow1->getAttribute(FlowAttributeKey(org::apache::nifi::minifi::MIME_TYPE), mime);
     REQUIRE(mime == "application/bzip2");
-    ReadCallback callback(flow1->getSize());
+    ReadCallback callback(gsl::narrow<size_t>(flow1->getSize()));
     sessionGenFlowFile.read(flow1, &callback);
     callback.archive_read();
     std::string contents(reinterpret_cast<char *> (callback.archive_buffer_), callback.archive_buffer_size_);
@@ -395,7 +395,7 @@ TEST_CASE("DecompressFileBZip", "[compressfiletest4]") {
     REQUIRE(flow1->getSize() != flow->getSize());
     std::string mime;
     REQUIRE(flow1->getAttribute(FlowAttributeKey(org::apache::nifi::minifi::MIME_TYPE), mime) == false);
-    ReadCallback callback(flow1->getSize());
+    ReadCallback callback(gsl::narrow<size_t>(flow1->getSize()));
     sessionGenFlowFile.read(flow1, &callback);
     std::string contents(reinterpret_cast<char *> (callback.buffer_), callback.read_size_);
     REQUIRE(testController.getRawContent() == contents);
@@ -442,7 +442,7 @@ TEST_CASE("CompressFileLZMA", "[compressfiletest5]") {
     std::string mime;
     flow1->getAttribute(FlowAttributeKey(org::apache::nifi::minifi::MIME_TYPE), mime);
     REQUIRE(mime == "application/x-lzma");
-    ReadCallback callback(flow1->getSize());
+    ReadCallback callback(gsl::narrow<size_t>(flow1->getSize()));
     sessionGenFlowFile.read(flow1, &callback);
     callback.archive_read();
     std::string contents(reinterpret_cast<char *> (callback.archive_buffer_), callback.archive_buffer_size_);
@@ -493,7 +493,7 @@ TEST_CASE("DecompressFileLZMA", "[compressfiletest6]") {
     REQUIRE(flow1->getSize() != flow->getSize());
     std::string mime;
     REQUIRE(flow1->getAttribute(FlowAttributeKey(org::apache::nifi::minifi::MIME_TYPE), mime) == false);
-    ReadCallback callback(flow1->getSize());
+    ReadCallback callback(gsl::narrow<size_t>(flow1->getSize()));
     sessionGenFlowFile.read(flow1, &callback);
     std::string contents(reinterpret_cast<char *> (callback.buffer_), callback.read_size_);
     REQUIRE(testController.getRawContent() == contents);
@@ -540,7 +540,7 @@ TEST_CASE("CompressFileXYLZMA", "[compressfiletest7]") {
     std::string mime;
     flow1->getAttribute(FlowAttributeKey(org::apache::nifi::minifi::MIME_TYPE), mime);
     REQUIRE(mime == "application/x-xz");
-    ReadCallback callback(flow1->getSize());
+    ReadCallback callback(gsl::narrow<size_t>(flow1->getSize()));
     sessionGenFlowFile.read(flow1, &callback);
     callback.archive_read();
     std::string contents(reinterpret_cast<char *> (callback.archive_buffer_), callback.archive_buffer_size_);
@@ -591,7 +591,7 @@ TEST_CASE("DecompressFileXYLZMA", "[compressfiletest8]") {
     REQUIRE(flow1->getSize() != flow->getSize());
     std::string mime;
     REQUIRE(flow1->getAttribute(FlowAttributeKey(org::apache::nifi::minifi::MIME_TYPE), mime) == false);
-    ReadCallback callback(flow1->getSize());
+    ReadCallback callback(gsl::narrow<size_t>(flow1->getSize()));
     sessionGenFlowFile.read(flow1, &callback);
     std::string contents(reinterpret_cast<char *> (callback.buffer_), callback.read_size_);
     REQUIRE(testController.getRawContent() == contents);
diff --git a/libminifi/test/archive-tests/FocusArchiveTests.cpp b/libminifi/test/archive-tests/FocusArchiveTests.cpp
index 898132a..6e15d43 100644
--- a/libminifi/test/archive-tests/FocusArchiveTests.cpp
+++ b/libminifi/test/archive-tests/FocusArchiveTests.cpp
@@ -112,11 +112,10 @@ TEST_CASE("FocusArchive", "[testFocusArchive]") {
 
     std::ifstream ifs(utils::file::FileUtils::concat_path(dir2, FOCUSED_FILE), std::ios::in | std::ios::binary | std::ios::ate);
 
-    std::ifstream::pos_type size = ifs.tellg();
-    int64_t bufsize {size};
+    size_t size = gsl::narrow<size_t>(ifs.tellg());
     ifs.seekg(0, std::ios::beg);
-    char *content = new char[bufsize];
-    ifs.read(content, bufsize);
+    char *content = new char[size];
+    ifs.read(content, size);
 
     REQUIRE(size == strlen(FOCUSED_CONTENT));
     REQUIRE(memcmp(content, FOCUSED_CONTENT, size) == 0);
diff --git a/libminifi/test/archive-tests/MergeFileTests.cpp b/libminifi/test/archive-tests/MergeFileTests.cpp
index dd6e204..b9f55f4 100644
--- a/libminifi/test/archive-tests/MergeFileTests.cpp
+++ b/libminifi/test/archive-tests/MergeFileTests.cpp
@@ -122,7 +122,7 @@ std::vector<FixedBuffer> read_archives(const FixedBuffer& input) {
   struct archive_entry *ae;
 
   while (archive_read_next_header(a, &ae) == ARCHIVE_OK) {
-    int size = archive_entry_size(ae);
+    int size = gsl::narrow<int>(archive_entry_size(ae));
     FixedBuffer buf(size);
     ArchiveEntryReader reader(a);
     auto ret = buf.write(reader, buf.capacity());
@@ -266,7 +266,7 @@ TEST_CASE("MergeFileDefragment", "[mergefiletest1]") {
   std::shared_ptr<core::FlowFile> flow2 = output->poll(expiredFlowRecords);
   REQUIRE(flow1->getSize() == 96);
   {
-    FixedBuffer callback(flow1->getSize());
+    FixedBuffer callback(gsl::narrow<size_t>(flow1->getSize()));
     sessionGenFlowFile.read(flow1, &callback);
     std::ifstream file1(EXPECT_MERGE_CONTENT_FIRST, std::ios::binary);
     std::string contents((std::istreambuf_iterator<char>(file1)), std::istreambuf_iterator<char>());
@@ -274,7 +274,7 @@ TEST_CASE("MergeFileDefragment", "[mergefiletest1]") {
   }
   REQUIRE(flow2->getSize() == 96);
   {
-    FixedBuffer callback(flow2->getSize());
+    FixedBuffer callback(gsl::narrow<size_t>(flow2->getSize()));
     sessionGenFlowFile.read(flow2, &callback);
     std::ifstream file2(EXPECT_MERGE_CONTENT_SECOND, std::ios::binary);
     std::string contents((std::istreambuf_iterator<char>(file2)), std::istreambuf_iterator<char>());
@@ -372,7 +372,7 @@ TEST_CASE("MergeFileDefragmentDelimiter", "[mergefiletest2]") {
   std::shared_ptr<core::FlowFile> flow2 = output->poll(expiredFlowRecords);
   REQUIRE(flow1->getSize() == 128);
   {
-    FixedBuffer callback(flow1->getSize());
+    FixedBuffer callback(gsl::narrow<size_t>(flow1->getSize()));
     sessionGenFlowFile.read(flow1, &callback);
     std::ifstream file1(EXPECT_MERGE_CONTENT_FIRST, std::ios::binary);
     std::string contents((std::istreambuf_iterator<char>(file1)), std::istreambuf_iterator<char>());
@@ -380,7 +380,7 @@ TEST_CASE("MergeFileDefragmentDelimiter", "[mergefiletest2]") {
   }
   REQUIRE(flow2->getSize() == 128);
   {
-    FixedBuffer callback(flow2->getSize());
+    FixedBuffer callback(gsl::narrow<size_t>(flow2->getSize()));
     sessionGenFlowFile.read(flow2, &callback);
     std::ifstream file2(EXPECT_MERGE_CONTENT_SECOND, std::ios::binary);
     std::string contents((std::istreambuf_iterator<char>(file2)), std::istreambuf_iterator<char>());
@@ -472,7 +472,7 @@ TEST_CASE("MergeFileDefragmentDropFlow", "[mergefiletest3]") {
   std::shared_ptr<core::FlowFile> flow2 = output->poll(expiredFlowRecords);
   REQUIRE(flow1->getSize() == 96);
   {
-    FixedBuffer callback(flow1->getSize());
+    FixedBuffer callback(gsl::narrow<size_t>(flow1->getSize()));
     sessionGenFlowFile.read(flow1, &callback);
     std::ifstream file1(EXPECT_MERGE_CONTENT_FIRST, std::ios::binary);
     std::string contents((std::istreambuf_iterator<char>(file1)), std::istreambuf_iterator<char>());
@@ -480,7 +480,7 @@ TEST_CASE("MergeFileDefragmentDropFlow", "[mergefiletest3]") {
   }
   REQUIRE(flow2->getSize() == 64);
   {
-    FixedBuffer callback(flow2->getSize());
+    FixedBuffer callback(gsl::narrow<size_t>(flow2->getSize()));
     sessionGenFlowFile.read(flow2, &callback);
     std::ifstream file2(EXPECT_MERGE_CONTENT_SECOND, std::ios::binary);
     std::string contents((std::istreambuf_iterator<char>(file2)), std::istreambuf_iterator<char>());
@@ -553,7 +553,7 @@ TEST_CASE("MergeFileBinPack", "[mergefiletest4]") {
   std::shared_ptr<core::FlowFile> flow2 = output->poll(expiredFlowRecords);
   REQUIRE(flow1->getSize() == 96);
   {
-    FixedBuffer callback(flow1->getSize());
+    FixedBuffer callback(gsl::narrow<size_t>(flow1->getSize()));
     sessionGenFlowFile.read(flow1, &callback);
     std::ifstream file1(EXPECT_MERGE_CONTENT_FIRST, std::ios::binary);
     std::string contents((std::istreambuf_iterator<char>(file1)), std::istreambuf_iterator<char>());
@@ -561,7 +561,7 @@ TEST_CASE("MergeFileBinPack", "[mergefiletest4]") {
   }
   REQUIRE(flow2->getSize() == 96);
   {
-    FixedBuffer callback(flow2->getSize());
+    FixedBuffer callback(gsl::narrow<size_t>(flow2->getSize()));
     sessionGenFlowFile.read(flow2, &callback);
     std::ifstream file2(EXPECT_MERGE_CONTENT_SECOND, std::ios::binary);
     std::string contents((std::istreambuf_iterator<char>(file2)), std::istreambuf_iterator<char>());
@@ -635,7 +635,7 @@ TEST_CASE("MergeFileTar", "[mergefiletest4]") {
   std::shared_ptr<core::FlowFile> flow2 = output->poll(expiredFlowRecords);
   REQUIRE(flow1->getSize() > 0);
   {
-    FixedBuffer callback(flow1->getSize());
+    FixedBuffer callback(gsl::narrow<size_t>(flow1->getSize()));
     sessionGenFlowFile.read(flow1, &callback);
     auto archives = read_archives(callback);
     REQUIRE(archives.size() == 3);
@@ -648,7 +648,7 @@ TEST_CASE("MergeFileTar", "[mergefiletest4]") {
   }
   REQUIRE(flow2->getSize() > 0);
   {
-    FixedBuffer callback(flow2->getSize());
+    FixedBuffer callback(gsl::narrow<size_t>(flow2->getSize()));
     sessionGenFlowFile.read(flow2, &callback);
     auto archives = read_archives(callback);
     REQUIRE(archives.size() == 3);
@@ -726,7 +726,7 @@ TEST_CASE("MergeFileZip", "[mergefiletest5]") {
   std::shared_ptr<core::FlowFile> flow2 = output->poll(expiredFlowRecords);
   REQUIRE(flow1->getSize() > 0);
   {
-    FixedBuffer callback(flow1->getSize());
+    FixedBuffer callback(gsl::narrow<size_t>(flow1->getSize()));
     sessionGenFlowFile.read(flow1, &callback);
     auto archives = read_archives(callback);
     REQUIRE(archives.size() == 3);
@@ -739,7 +739,7 @@ TEST_CASE("MergeFileZip", "[mergefiletest5]") {
   }
   REQUIRE(flow2->getSize() > 0);
   {
-    FixedBuffer callback(flow2->getSize());
+    FixedBuffer callback(gsl::narrow<size_t>(flow2->getSize()));
     sessionGenFlowFile.read(flow2, &callback);
     auto archives = read_archives(callback);
     REQUIRE(archives.size() == 3);
diff --git a/libminifi/test/archive-tests/util/ArchiveTests.cpp b/libminifi/test/archive-tests/util/ArchiveTests.cpp
index d3080c8..5f94cf9 100644
--- a/libminifi/test/archive-tests/util/ArchiveTests.cpp
+++ b/libminifi/test/archive-tests/util/ArchiveTests.cpp
@@ -131,7 +131,7 @@ bool check_archive_contents(std::string path, TAE_MAP_T entries, bool check_attr
     } else {
       read_names.push_back(name);
       TestArchiveEntry test_entry = it->second;
-      size_t size = archive_entry_size(entry);
+      size_t size = gsl::narrow<size_t>(archive_entry_size(entry));
 
       std::cout << "Checking archive entry: " << name << std::endl;
 
diff --git a/libminifi/test/keyvalue-tests/PersistableKeyValueStoreServiceTest.cpp b/libminifi/test/keyvalue-tests/PersistableKeyValueStoreServiceTest.cpp
index 6f8cd7b..9a42a3e 100644
--- a/libminifi/test/keyvalue-tests/PersistableKeyValueStoreServiceTest.cpp
+++ b/libminifi/test/keyvalue-tests/PersistableKeyValueStoreServiceTest.cpp
@@ -71,8 +71,11 @@ class PersistableKeyValueStoreServiceTestsFixture {
     char format[] = "/var/tmp/state.XXXXXX";
     state_dir = testController.createTempDirectory(format);
     REQUIRE(false == state_dir.empty());
+#ifdef WIN32
+    REQUIRE(0 == _chdir(state_dir.c_str()));
+#else
     REQUIRE(0 == chdir(state_dir.c_str()));
-
+#endif
     loadYaml();
   }
 
diff --git a/libminifi/test/rocksdb-tests/DBProvenanceRepositoryTests.cpp b/libminifi/test/rocksdb-tests/DBProvenanceRepositoryTests.cpp
index 66b1604..8e29c5e 100644
--- a/libminifi/test/rocksdb-tests/DBProvenanceRepositoryTests.cpp
+++ b/libminifi/test/rocksdb-tests/DBProvenanceRepositoryTests.cpp
@@ -39,7 +39,7 @@ void generateData(std::vector<char>& data) {
 }
 
 void provisionRepo(minifi::provenance::ProvenanceRepository& repo, size_t number_of_records, size_t record_size) {
-  for (int i = 0; i < number_of_records; ++i) {
+  for (size_t i = 0; i < number_of_records; ++i) {
     std::vector<char> v(record_size);
     generateData(v);
     REQUIRE(repo.Put(std::to_string(i), reinterpret_cast<const uint8_t*>(v.data()), v.size()));
@@ -76,7 +76,7 @@ TEST_CASE("Test size limit", "[sizeLimitTest]") {
 
   REQUIRE(provdb.initialize(configuration));
 
-  uint64_t keyCount = 500;
+  size_t keyCount = 500;
 
   provisionRepo(provdb, keyCount, 10240);
 
@@ -99,7 +99,7 @@ TEST_CASE("Test time limit", "[timeLimitTest]") {
 
   REQUIRE(provdb.initialize(configuration));
 
-  uint64_t keyCount = 500;
+  size_t keyCount = 500;
 
   provisionRepo(provdb, keyCount / 2, 102400);
 
diff --git a/libminifi/test/unit/FileStreamTests.cpp b/libminifi/test/unit/FileStreamTests.cpp
index 5c1c2dc..f7c9b2b 100644
--- a/libminifi/test/unit/FileStreamTests.cpp
+++ b/libminifi/test/unit/FileStreamTests.cpp
@@ -15,6 +15,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
+#include <cstdio>
 #include <iostream>
 #include <string>
 #include <vector>
@@ -57,7 +59,7 @@ TEST_CASE("TestFileOverWrite", "[TestFiles]") {
 
   REQUIRE(std::string(reinterpret_cast<char*>(data), verifybuffer.size()) == "tempfile");
 
-  unlink(ss.str().c_str());
+  std::remove(ss.str().c_str());
 }
 
 TEST_CASE("TestFileBadArgumentNoChange", "[TestLoader]") {
@@ -95,7 +97,7 @@ TEST_CASE("TestFileBadArgumentNoChange", "[TestLoader]") {
 
   REQUIRE(std::string(reinterpret_cast<char*>(data), verifybuffer.size()) == "tempFile");
 
-  unlink(ss.str().c_str());
+  std::remove(ss.str().c_str());
 }
 
 TEST_CASE("TestFileBadArgumentNoChange2", "[TestLoader]") {
@@ -133,7 +135,7 @@ TEST_CASE("TestFileBadArgumentNoChange2", "[TestLoader]") {
 
   REQUIRE(std::string(reinterpret_cast<char*>(data), verifybuffer.size()) == "tempFile");
 
-  unlink(ss.str().c_str());
+  std::remove(ss.str().c_str());
 }
 
 TEST_CASE("TestFileBadArgumentNoChange3", "[TestLoader]") {
@@ -171,7 +173,7 @@ TEST_CASE("TestFileBadArgumentNoChange3", "[TestLoader]") {
 
   REQUIRE(std::string(reinterpret_cast<char*>(data), verifybuffer.size()) == "");
 
-  unlink(ss.str().c_str());
+  std::remove(ss.str().c_str());
 }
 
 TEST_CASE("TestFileBeyondEnd3", "[TestLoader]") {
@@ -205,7 +207,7 @@ TEST_CASE("TestFileBeyondEnd3", "[TestLoader]") {
 
   REQUIRE(std::string(reinterpret_cast<char*>(data), verifybuffer.size()) == "tempFile");
 
-  unlink(ss.str().c_str());
+  std::remove(ss.str().c_str());
 }
 
 TEST_CASE("TestFileExceedSize", "[TestLoader]") {
@@ -240,5 +242,5 @@ TEST_CASE("TestFileExceedSize", "[TestLoader]") {
     REQUIRE(stream.readData(verifybuffer, 8192) == 8192);
   REQUIRE(stream.readData(verifybuffer, 8192) == 0);
 
-  unlink(ss.str().c_str());
+  std::remove(ss.str().c_str());
 }
diff --git a/libminifi/test/unit/SerializationTests.cpp b/libminifi/test/unit/SerializationTests.cpp
index 7749087..029cde4 100644
--- a/libminifi/test/unit/SerializationTests.cpp
+++ b/libminifi/test/unit/SerializationTests.cpp
@@ -70,3 +70,19 @@ TEST_CASE("TestWriteUTF3", "[MINIFI193]") {
   REQUIRE(verifyString == stringOne);
 }
 
+TEST_CASE("Serialization test: the byteSwap functions work correctly", "[byteSwap]") {
+    REQUIRE(byteSwap(uint16_t{0}) == uint16_t{0});
+    REQUIRE(byteSwap(uint16_t{0x0001}) == uint16_t{0x0100});
+    REQUIRE(byteSwap(uint16_t{0x0102}) == uint16_t{0x0201});
+    REQUIRE(byteSwap(uint16_t{0xFFEE}) == uint16_t{0xEEFF});
+
+    REQUIRE(byteSwap(uint32_t{0}) == uint32_t{0});
+    REQUIRE(byteSwap(uint32_t{0x00000001}) == uint32_t{0x01000000});
+    REQUIRE(byteSwap(uint32_t{0x01020304}) == uint32_t{0x04030201});
+    REQUIRE(byteSwap(uint32_t{0xFFEEDDCC}) == uint32_t{0xCCDDEEFF});
+
+    REQUIRE(byteSwap(uint64_t{0}) == uint64_t{0});
+    REQUIRE(byteSwap(uint64_t{0x0000000000000001}) == uint64_t{0x0100000000000000});
+    REQUIRE(byteSwap(uint64_t{0x0102030405060708}) == uint64_t{0x0807060504030201});
+    REQUIRE(byteSwap(uint64_t{0xFFEEDDCCBBAA9988}) == uint64_t{0x8899AABBCCDDEEFF});
+}
diff --git a/libminifi/test/unit/Site2SiteTests.cpp b/libminifi/test/unit/Site2SiteTests.cpp
index 4862b33..66e0913 100644
--- a/libminifi/test/unit/Site2SiteTests.cpp
+++ b/libminifi/test/unit/Site2SiteTests.cpp
@@ -156,7 +156,7 @@ TEST_CASE("TestSiteToSiteVerifySend", "[S2S3]") {
 TEST_CASE("TestSiteToSiteVerifyNegotiationFail", "[S2S4]") {
   SiteToSiteResponder *collector = new SiteToSiteResponder();
 
-  char a = 0xFF;
+  char a = '\xFF';
   std::string resp_code;
   resp_code.insert(resp_code.begin(), a);
   collector->push_response(resp_code);
diff --git a/nanofi/include/core/cstream.h b/nanofi/include/core/cstream.h
index 5d2c833..0a46a0e 100644
--- a/nanofi/include/core/cstream.h
+++ b/nanofi/include/core/cstream.h
@@ -40,7 +40,7 @@ int write_char(char value, cstream * stream);
 
 int write_buffer(const uint8_t *value, int len, cstream * stream);
 
-int writeUTF(const char * cstr, uint64_t len, enum Bool widen, cstream * stream);
+int writeUTF(const char * cstr, size_t length, enum Bool widen, cstream * stream);
 
 int read_char(char *value, cstream * stream);
 
@@ -56,7 +56,7 @@ int read_buffer(uint8_t *value, int len, cstream * stream);
 
 int readUTFLen(uint32_t * utflen, cstream * stream);
 
-int readUTF(char * buf, uint64_t buflen, cstream * stream);
+int readUTF(char * buf, uint32_t buflen, cstream * stream);
 
 void close_stream(cstream * stream);
 
diff --git a/nanofi/include/core/string_utils.h b/nanofi/include/core/string_utils.h
index f25adf8..c9c85eb 100644
--- a/nanofi/include/core/string_utils.h
+++ b/nanofi/include/core/string_utils.h
@@ -52,7 +52,7 @@ token_list tokenize_string_tailfile(const char * str, char delim);
  * @param begin the beginning of the token
  * @param len the length of the token
  */
-void add_token_to_list(token_list * tks, const char * begin, uint64_t len);
+void add_token_to_list(token_list * tks, const char * begin, size_t len);
 
 /**
  * Deallocate one token node
diff --git a/nanofi/include/sitetosite/CSiteToSite.h b/nanofi/include/sitetosite/CSiteToSite.h
index a35b3c5..7b9cab2 100644
--- a/nanofi/include/sitetosite/CSiteToSite.h
+++ b/nanofi/include/sitetosite/CSiteToSite.h
@@ -27,6 +27,7 @@
 
 #ifdef WIN32
 #include <winsock2.h>
+
 #else
 #include <arpa/inet.h>
 #endif
@@ -40,7 +41,7 @@
 extern "C" {
 #endif
 
-#define htonll_r(x) ((((uint64_t)htonl(x)) << 32) + htonl((x) >> 32))
+#define htonll_r(x) ((((uint64_t)htonl((uint32_t)x)) << 32) + htonl((uint32_t)((x) >> 32)))
 
 // Resource Negotiated Status Code
 #define RESOURCE_OK 20
@@ -269,7 +270,7 @@ typedef struct {
   //org::apache::nifi::minifi::io::BaseStream* _stream;
   cstream * _stream;
 
-  uint64_t _crc;
+  uLong _crc;
 
   char _uuid_str[37];
 
@@ -367,7 +368,7 @@ static int write_UTF_len(CTransaction * transaction, const char * str, size_t le
 
   int ret;
   if (!widen) {
-    uint16_t shortlen = len;
+    uint16_t shortlen = (uint16_t)len;
     ret = write_uint16t(transaction, shortlen);
   } else {
     ret = write_uint32t(transaction, len);
@@ -380,7 +381,7 @@ static int write_UTF_len(CTransaction * transaction, const char * str, size_t le
   const uint8_t *underlyingPtr = (const uint8_t *)str;
 
   if (!widen) {
-    uint16_t short_length = len;
+    uint16_t short_length = (uint16_t)len;
     ret = writeData(transaction, underlyingPtr, short_length);
   } else {
     ret = writeData(transaction, underlyingPtr, len);
diff --git a/nanofi/src/api/nanofi.cpp b/nanofi/src/api/nanofi.cpp
index f6e40c8..03a6d26 100644
--- a/nanofi/src/api/nanofi.cpp
+++ b/nanofi/src/api/nanofi.cpp
@@ -50,7 +50,7 @@ file_buffer file_to_buffer(const char *path) {
   NULL_CHECK(fb, path);
   FILE *fileptr;
   uint8_t *buffer;
-  uint64_t filelen;
+  size_t filelen;
 
   fileptr = fopen(path, "rb");
   NULL_CHECK(fb, fileptr);
@@ -321,7 +321,7 @@ flow_file_record * write_to_flow(const char * buff, size_t count, processor_cont
         return NULL;
     }
 
-    int ret = fwrite(buff, 1, count, ffp);
+    size_t ret = fwrite(buff, 1, count, ffp);
     if (ret < count) {
         fclose(ffp);
         free_flowfile(ffr);
@@ -419,7 +419,7 @@ int get_all_attributes(const flow_file_record* ff, attribute_set *target) {
   NULL_CHECK(0, ff, target);
   NULL_CHECK(0, ff->attributes, target->attributes);
   auto attribute_map = static_cast<string_map*>(ff->attributes);
-  int i = 0;
+  size_t i = 0;
   for (const auto& kv : *attribute_map) {
     if (i >= target->size) {
       break;
@@ -429,7 +429,7 @@ int get_all_attributes(const flow_file_record* ff, attribute_set *target) {
     target->attributes[i].value_size = kv.second.size();
     ++i;
   }
-  return i;
+  return gsl::narrow<int>(i);
 }
 
 /**
@@ -442,7 +442,7 @@ int8_t remove_attribute(flow_file_record *ff, const char *key) {
   NULL_CHECK(-1, ff, key);
   NULL_CHECK(-1, ff->attributes);
   auto attribute_map = static_cast<string_map*>(ff->attributes);
-  return attribute_map->erase(key) - 1;  // erase by key returns the number of elements removed (0 or 1)
+  return gsl::narrow<int8_t>(attribute_map->erase(key)) - 1;  // erase by key returns the number of elements removed (0 or 1)
 }
 
 int get_content(const flow_file_record* ff, uint8_t* target, int size) {
@@ -455,7 +455,7 @@ int get_content(const flow_file_record* ff, uint8_t* target, int size) {
     return stream->read(target, size);
   } else {
     file_buffer fb = file_to_buffer(ff->contentLocation);
-    size_t copy_size = size < fb.file_len ? size : fb.file_len;
+    size_t copy_size = size < fb.file_len ? size : gsl::narrow<size_t>(fb.file_len);
     memcpy(target, fb.buffer, copy_size*sizeof(uint8_t));
     free(fb.buffer);
     return copy_size;
@@ -499,7 +499,7 @@ int transmit_flowfile(flow_file_record *ff, nifi_instance *instance) {
     } else {
       file_buffer fb = file_to_buffer(ff->contentLocation);
       stream = std::make_shared<minifi::io::DataStream>();
-      stream->writeData(fb.buffer, fb.file_len);
+      stream->writeData(fb.buffer, gsl::narrow<int>(fb.file_len));
       free(fb.buffer);
     }
   } else {
@@ -703,7 +703,7 @@ flow_file_record *invoke_ff(standalone_processor* proc, const flow_file_record *
     } else {
       ff_data->content_stream = std::make_shared<minifi::io::DataStream>();
       file_buffer fb = file_to_buffer(input_ff->contentLocation);
-      ff_data->content_stream->writeData(fb.buffer, fb.file_len);
+      ff_data->content_stream->writeData(fb.buffer, gsl::narrow<int>(fb.file_len));
       free(fb.buffer);
     }
 
@@ -730,7 +730,7 @@ flow_file_record *invoke_chunk(standalone_processor* proc, uint8_t* buf, uint64_
 
   auto ff_data = std::make_shared<flowfile_input_params>();
   ff_data->content_stream = std::make_shared<minifi::io::DataStream>();
-  ff_data->content_stream->writeData(buf, size);
+  ff_data->content_stream->writeData(buf, gsl::narrow<int>(size));
 
   plan->runNextProcessor(nullptr, ff_data);
   while (plan->runNextProcessor()) {
diff --git a/nanofi/src/core/cstream.c b/nanofi/src/core/cstream.c
index 5468273..4664f72 100644
--- a/nanofi/src/core/cstream.c
+++ b/nanofi/src/core/cstream.c
@@ -19,6 +19,7 @@
 #ifdef _WIN32
 #define NOMINMAX
 #include <winsock2.h>
+#include <ws2tcpip.h>
 #else
 #include <sys/socket.h>  // socket
 #include <arpa/inet.h> // inet_addr
@@ -90,14 +91,15 @@ int read_buffer(uint8_t *buf, int len, cstream * stream) {
   return total_read;
 }
 
-int writeUTF(const char * cstr, uint64_t len, enum Bool widen, cstream * stream) {
-  if (len > 65535) {
+int writeUTF(const char * cstr, size_t length, enum Bool widen, cstream * stream) {
+  if (length > 65535) {
     return -1;
   }
+  int len = (int) length;
 
   int ret;
   if (!widen) {
-    uint16_t shortlen = len;
+    uint16_t shortlen = (uint16_t) len;
     ret = write_uint16_t(shortlen, stream);
   } else {
     ret = write_uint32_t(len, stream);
@@ -108,14 +110,7 @@ int writeUTF(const char * cstr, uint64_t len, enum Bool widen, cstream * stream)
   }
 
   const uint8_t *underlyingPtr = (const uint8_t *)cstr;
-
-  if (!widen) {
-    uint16_t short_length = len;
-    ret = write_buffer(underlyingPtr, short_length, stream);
-  } else {
-    ret = write_buffer(underlyingPtr, len, stream);
-  }
-  return ret;
+  return write_buffer(underlyingPtr, len, stream);
 }
 
 int read_uint8_t(uint8_t *value, cstream * stream) {
@@ -153,9 +148,9 @@ int readUTFLen(uint32_t * utflen, cstream * stream) {
   return ret;
 }
 
-int readUTF(char * buf, uint64_t buflen, cstream * stream) {
+int readUTF(char * buf, uint32_t buflen, cstream * stream) {
   //return stream->impl->readData((uint8_t*)buf, buflen);
-  return read_buffer((uint8_t*)buf, buflen, stream);
+  return read_buffer((uint8_t*)buf, (int) buflen, stream);
 }
 
 void close_stream(cstream * stream) {
@@ -212,7 +207,11 @@ cstream * create_socket(const char * host, uint16_t portnum) {
       break;
     }
 
+#ifdef WIN32
+    closesocket(sock);
+#else
     close(sock);
+#endif
   }
 
   freeaddrinfo(result);
diff --git a/nanofi/src/core/cuuid.c b/nanofi/src/core/cuuid.c
index fa38966..c58e86c 100644
--- a/nanofi/src/core/cuuid.c
+++ b/nanofi/src/core/cuuid.c
@@ -21,6 +21,7 @@
 #include "uuid.h"
 #endif
 
+#include <stdio.h>
 #include "core/cuuid.h"
 
 #ifdef WIN32
diff --git a/nanofi/src/core/string_utils.c b/nanofi/src/core/string_utils.c
index b513b30..c0e2f61 100644
--- a/nanofi/src/core/string_utils.c
+++ b/nanofi/src/core/string_utils.c
@@ -29,7 +29,7 @@ int validate_list(struct token_list * tk_list) {
     return 0;
 }
 
-void add_token_to_list(struct token_list * tk_list, const char * begin, uint64_t len) {
+void add_token_to_list(struct token_list * tk_list, const char * begin, size_t len) {
     struct token_node * new_node = (struct token_node *)malloc(sizeof(struct token_node));
     new_node->data = (char *)malloc((len+1) * sizeof(char));
     strncpy(new_node->data, begin, len);
@@ -137,14 +137,14 @@ token_list tokenize_string(const char * begin, char delim) {
             tks.total_bytes++;
             continue;
         }
-        int len = end - begin;
+        size_t len = end - begin;
         add_token_to_list(&tks, begin, len);
         tks.total_bytes++;
         begin = (end+1);
     }
 
     if (begin && *begin != '\0') {
-        int len = strlen(begin);
+        size_t len = strlen(begin);
         if (len < MAX_BYTES_READ) {
             tks.has_non_delimited_token = 1;
         }
diff --git a/nanofi/src/sitetosite/CRawSocketProtocol.c b/nanofi/src/sitetosite/CRawSocketProtocol.c
index 7c50086..4874cc7 100644
--- a/nanofi/src/sitetosite/CRawSocketProtocol.c
+++ b/nanofi/src/sitetosite/CRawSocketProtocol.c
@@ -697,7 +697,7 @@ int confirm(struct CRawSiteToSiteClient * client, const char * transactionID) {
       return -1;
     }
 
-    int i;
+    size_t i;
     for (i = 0; i < packet->_attributes->size; ++i) {
       const char *key = packet->_attributes->attributes[i].key;
 
@@ -717,25 +717,24 @@ int confirm(struct CRawSiteToSiteClient * client, const char * transactionID) {
 
     uint64_t len = 0;
 
-    uint64_t content_size = 0;
-
     if(ff != NULL) {
-      content_size = ff->size;
+      int content_size = (int) ff->size;
 
       uint8_t * content_buf = NULL;
 
       if(content_size > 0 && ff->crp != NULL) {
         content_buf = (uint8_t*)malloc(content_size*sizeof(uint8_t));
-        len = get_content(ff, content_buf, content_size);
-        if(len <= 0) {
+        int len_as_int = get_content(ff, content_buf, content_size);
+        if (len_as_int <= 0) {
           return -2;
         }
+        len = len_as_int;
         ret = write_uint64t(transaction, len);
         if (ret != 8) {
           logc(debug, "ret != 8");
           return -1;
         }
-        writeData(transaction, content_buf, len);
+        writeData(transaction, content_buf, len_as_int);
       }
 
     } else if (packet->payload_ != NULL && strlen(packet->payload_) > 0) {
@@ -746,7 +745,7 @@ int confirm(struct CRawSiteToSiteClient * client, const char * transactionID) {
         return -1;
       }
 
-      ret = writeData(transaction, (uint8_t *)(packet->payload_), len);
+      ret = writeData(transaction, (uint8_t *)(packet->payload_), (int) len);
       if (ret != (int64_t)len) {
         logc(debug, "ret != len");
         return -1;