diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 550fc2fb0..e31d63831 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -309,6 +309,51 @@ jobs:
         cd ${{ env.CI_FOLDER }}
         echo "Starting to run AppVerifier with cycle pub-sub sample"
         python ${{ env.CI_UTILS_FOLDER }}/appverifier_launch_sample.py --sample_file ".\aws-iot-device-sdk-cpp-v2\build\samples\pub_sub\cycle_pub_sub\RelWithDebInfo\cycle-pub-sub.exe" --sample_secret_endpoint 'ci/endpoint' --sample_secret_certificate 'ci/CyclePubSub/cert' --sample_secret_private_key 'ci/CyclePubSub/key'
+  windows-shared-lib:
+    runs-on: windows-latest
+    permissions:
+      id-token: write # This is required for requesting the JWT
+    steps:
+      - name: Build ${{ env.PACKAGE_NAME }} + consumers
+        run: |
+          md ${{ env.CI_FOLDER }}
+          cd ${{ env.CI_FOLDER }}
+          python -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz', 'builder.pyz')"
+          python builder.pyz build -p ${{ env.PACKAGE_NAME }} --cmake-extra=-DBUILD_SHARED_LIBS=ON
+      - name: Running samples in CI setup
+        run: |
+          python -m pip install boto3
+      - name: configure AWS credentials (PubSub)
+        uses: aws-actions/configure-aws-credentials@v1
+        with:
+          role-to-assume: ${{ env.CI_PUBSUB_ROLE }}
+          aws-region: ${{ env.AWS_DEFAULT_REGION }}
+      - name: run MQTT3 PubSub sample
+        run: |
+          cd ${{ env.CI_FOLDER }}
+          python ${{ env.CI_UTILS_FOLDER }}/run_sample_ci.py --file ${{ env.CI_SAMPLES_CFG_FOLDER }}/ci_run_pubsub_windows_cfg.json
+      - name: run Windows Certificate Connect sample
+        run: |
+          cd ${{ env.CI_FOLDER }}
+          python ${{ env.CI_UTILS_FOLDER }}/run_sample_ci.py --file ${{ env.CI_SAMPLES_CFG_FOLDER }}/ci_run_windows_cert_connect_cfg.json
+      - name: configure AWS credentials (MQTT5)
+        uses: aws-actions/configure-aws-credentials@v1
+        with:
+          role-to-assume: ${{ env.CI_MQTT5_ROLE }}
+          aws-region: ${{ env.AWS_DEFAULT_REGION }}
+      - name: run MQTT5 PubSub sample
+        run: |
+          cd ${{ env.CI_FOLDER }}
+          python ${{ env.CI_UTILS_FOLDER }}/run_sample_ci.py --file ${{ env.CI_SAMPLES_CFG_FOLDER }}/ci_run_mqtt5_pubsub_windows_cfg.json
+      - name: configure AWS credentials (Device Advisor)
+        uses: aws-actions/configure-aws-credentials@v1
+        with:
+          role-to-assume: ${{ env.CI_DEVICE_ADVISOR }}
+          aws-region: ${{ env.AWS_DEFAULT_REGION }}
+      - name: run DeviceAdvisor
+        run: |
+          cd ${{ env.CI_FOLDER }}/aws-iot-device-sdk-cpp-v2
+          python ./deviceadvisor/script/DATestRun.py
   osx:
     runs-on: macos-latest
     permissions:
diff --git a/jobs/include/aws/iotjobs/JobStatus.h b/jobs/include/aws/iotjobs/JobStatus.h
index 9692cefbe..7655b5f30 100644
--- a/jobs/include/aws/iotjobs/JobStatus.h
+++ b/jobs/include/aws/iotjobs/JobStatus.h
@@ -58,8 +58,8 @@ namespace Aws
 
         namespace JobStatusMarshaller
         {
-            const char *AWS_IOTJOBS_API ToString(JobStatus val);
-            JobStatus AWS_IOTJOBS_API FromString(const Aws::Crt::String &val);
+            AWS_IOTJOBS_API const char *ToString(JobStatus val);
+            AWS_IOTJOBS_API JobStatus FromString(const Aws::Crt::String &val);
         } // namespace JobStatusMarshaller
     }     // namespace Iotjobs
 } // namespace Aws
diff --git a/jobs/include/aws/iotjobs/RejectedErrorCode.h b/jobs/include/aws/iotjobs/RejectedErrorCode.h
index 6e5ce1d99..83228c402 100644
--- a/jobs/include/aws/iotjobs/RejectedErrorCode.h
+++ b/jobs/include/aws/iotjobs/RejectedErrorCode.h
@@ -73,8 +73,8 @@ namespace Aws
 
         namespace RejectedErrorCodeMarshaller
         {
-            const char *AWS_IOTJOBS_API ToString(RejectedErrorCode val);
-            RejectedErrorCode AWS_IOTJOBS_API FromString(const Aws::Crt::String &val);
+            AWS_IOTJOBS_API const char *ToString(RejectedErrorCode val);
+            AWS_IOTJOBS_API RejectedErrorCode FromString(const Aws::Crt::String &val);
         } // namespace RejectedErrorCodeMarshaller
     }     // namespace Iotjobs
 } // namespace Aws