From d33dcf71d52e9b9f873bcdcc3f9225fa975b7917 Mon Sep 17 00:00:00 2001
From: sivadeilra <arlie.davis@microsoft.com>
Date: Tue, 18 Jun 2024 05:47:19 -0700
Subject: [PATCH] Simplify how extension code for `windows` crate works (#3110)

---
 .../libs/bindgen/src/rust/extensions/mod.rs   |  67 +-
 .../Win32/UI/WindowsAndMessaging/mod.rs       |   9 +-
 .../UI/WindowsAndMessaging/WindowLong.rs      |   0
 .../Windows/Foundation/Collections/impl.rs    | 351 -------
 .../src/Windows/Foundation/Numerics/mod.rs    | 908 ------------------
 .../windows/src/Windows/Foundation/mod.rs     |  10 -
 .../src/Windows/Win32/Foundation/mod.rs       | 287 ------
 .../Windows/Win32/Networking/WinSock/mod.rs   |  66 --
 .../src/Windows/Win32/System/Com/mod.rs       |  53 -
 .../src/Windows/Win32/System/Rpc/mod.rs       |  32 -
 .../Win32/UI/WindowsAndMessaging/mod.rs       |   9 +-
 crates/libs/windows/src/extensions.rs         |  20 +
 .../libs/windows/src/extensions/Foundation.rs |   5 +
 .../src/extensions/Foundation/Collections.rs  |   6 +
 .../Foundation/Collections/Iterable.rs        |  14 +-
 .../Foundation/Collections/MapView.rs         |  37 +-
 .../Foundation/Collections/VectorView.rs      |  19 +-
 .../src/extensions/Foundation/Numerics.rs     |   5 +
 .../Foundation/Numerics/Matrix3x2.rs          |   2 +
 .../Foundation/Numerics/Matrix4x4.rs          |   2 +
 .../Foundation/Numerics/Vector2.rs            |   2 +
 .../Foundation/Numerics/Vector3.rs            |   2 +
 .../Foundation/Numerics/Vector4.rs            |   2 +
 .../src/extensions}/Foundation/TimeSpan.rs    |   2 +
 crates/libs/windows/src/extensions/Win32.rs   |   6 +
 .../src/extensions/Win32/Foundation.rs        |   5 +
 .../src/extensions}/Win32/Foundation/BOOL.rs  |   2 +
 .../extensions}/Win32/Foundation/BOOLEAN.rs   |   2 +
 .../extensions}/Win32/Foundation/NTSTATUS.rs  |   2 +
 .../Win32/Foundation/VARIANT_BOOL.rs          |   2 +
 .../Win32/Foundation/WIN32_ERROR.rs           |   2 +
 .../src/extensions/Win32/Networking.rs        |   2 +
 .../extensions/Win32/Networking/WinSock.rs    |   5 +
 .../Win32/Networking/WinSock/IN6_ADDR.rs      |   2 +
 .../Win32/Networking/WinSock/IN_ADDR.rs       |   2 +
 .../Win32/Networking/WinSock/SOCKADDR_IN.rs   |   2 +
 .../Win32/Networking/WinSock/SOCKADDR_IN6.rs  |   2 +
 .../Win32/Networking/WinSock/SOCKADDR_INET.rs |   2 +
 .../windows/src/extensions/Win32/System.rs    |   4 +
 .../src/extensions/Win32/System/Com.rs        |   1 +
 .../extensions}/Win32/System/Com/IDispatch.rs |   2 +
 .../src/extensions/Win32/System/Rpc.rs        |   1 +
 .../Win32/System/Rpc/RPC_STATUS.rs            |   2 +
 .../UI/WindowsAndMessaging/WindowLong.rs      |   8 +
 crates/libs/windows/src/lib.rs                |   2 +
 45 files changed, 150 insertions(+), 1818 deletions(-)
 rename crates/libs/{bindgen/src/rust/extensions/mod => sys/src/includes}/Win32/UI/WindowsAndMessaging/WindowLong.rs (100%)
 create mode 100644 crates/libs/windows/src/extensions.rs
 create mode 100644 crates/libs/windows/src/extensions/Foundation.rs
 create mode 100644 crates/libs/windows/src/extensions/Foundation/Collections.rs
 rename crates/libs/{bindgen/src/rust/extensions/impl => windows/src/extensions}/Foundation/Collections/Iterable.rs (87%)
 rename crates/libs/{bindgen/src/rust/extensions/impl => windows/src/extensions}/Foundation/Collections/MapView.rs (79%)
 rename crates/libs/{bindgen/src/rust/extensions/impl => windows/src/extensions}/Foundation/Collections/VectorView.rs (88%)
 create mode 100644 crates/libs/windows/src/extensions/Foundation/Numerics.rs
 rename crates/libs/{bindgen/src/rust/extensions/mod => windows/src/extensions}/Foundation/Numerics/Matrix3x2.rs (98%)
 rename crates/libs/{bindgen/src/rust/extensions/mod => windows/src/extensions}/Foundation/Numerics/Matrix4x4.rs (99%)
 rename crates/libs/{bindgen/src/rust/extensions/mod => windows/src/extensions}/Foundation/Numerics/Vector2.rs (99%)
 rename crates/libs/{bindgen/src/rust/extensions/mod => windows/src/extensions}/Foundation/Numerics/Vector3.rs (99%)
 rename crates/libs/{bindgen/src/rust/extensions/mod => windows/src/extensions}/Foundation/Numerics/Vector4.rs (99%)
 rename crates/libs/{bindgen/src/rust/extensions/mod => windows/src/extensions}/Foundation/TimeSpan.rs (90%)
 create mode 100644 crates/libs/windows/src/extensions/Win32.rs
 create mode 100644 crates/libs/windows/src/extensions/Win32/Foundation.rs
 rename crates/libs/{bindgen/src/rust/extensions/mod => windows/src/extensions}/Win32/Foundation/BOOL.rs (97%)
 rename crates/libs/{bindgen/src/rust/extensions/mod => windows/src/extensions}/Win32/Foundation/BOOLEAN.rs (97%)
 rename crates/libs/{bindgen/src/rust/extensions/mod => windows/src/extensions}/Win32/Foundation/NTSTATUS.rs (94%)
 rename crates/libs/{bindgen/src/rust/extensions/mod => windows/src/extensions}/Win32/Foundation/VARIANT_BOOL.rs (95%)
 rename crates/libs/{bindgen/src/rust/extensions/mod => windows/src/extensions}/Win32/Foundation/WIN32_ERROR.rs (95%)
 create mode 100644 crates/libs/windows/src/extensions/Win32/Networking.rs
 create mode 100644 crates/libs/windows/src/extensions/Win32/Networking/WinSock.rs
 rename crates/libs/{bindgen/src/rust/extensions/mod => windows/src/extensions}/Win32/Networking/WinSock/IN6_ADDR.rs (86%)
 rename crates/libs/{bindgen/src/rust/extensions/mod => windows/src/extensions}/Win32/Networking/WinSock/IN_ADDR.rs (91%)
 rename crates/libs/{bindgen/src/rust/extensions/mod => windows/src/extensions}/Win32/Networking/WinSock/SOCKADDR_IN.rs (84%)
 rename crates/libs/{bindgen/src/rust/extensions/mod => windows/src/extensions}/Win32/Networking/WinSock/SOCKADDR_IN6.rs (88%)
 rename crates/libs/{bindgen/src/rust/extensions/mod => windows/src/extensions}/Win32/Networking/WinSock/SOCKADDR_INET.rs (91%)
 create mode 100644 crates/libs/windows/src/extensions/Win32/System.rs
 create mode 100644 crates/libs/windows/src/extensions/Win32/System/Com.rs
 rename crates/libs/{bindgen/src/rust/extensions/mod => windows/src/extensions}/Win32/System/Com/IDispatch.rs (98%)
 create mode 100644 crates/libs/windows/src/extensions/Win32/System/Rpc.rs
 rename crates/libs/{bindgen/src/rust/extensions/mod => windows/src/extensions}/Win32/System/Rpc/RPC_STATUS.rs (94%)
 create mode 100644 crates/libs/windows/src/includes/Win32/UI/WindowsAndMessaging/WindowLong.rs

diff --git a/crates/libs/bindgen/src/rust/extensions/mod.rs b/crates/libs/bindgen/src/rust/extensions/mod.rs
index 3a42b9b452..f5bdc92d87 100644
--- a/crates/libs/bindgen/src/rust/extensions/mod.rs
+++ b/crates/libs/bindgen/src/rust/extensions/mod.rs
@@ -1,55 +1,34 @@
 use super::*;
 
-pub fn gen_mod(writer: &Writer, namespace: &str) -> TokenStream {
-    if namespace == "Windows.Win32.UI.WindowsAndMessaging" {
-        return include_str!("mod/Win32/UI/WindowsAndMessaging/WindowLong.rs").into();
-    }
-
-    if writer.sys {
-        return "".into();
+/// Helper function for `gen_mod` and `gen_impl`.
+///
+/// This function generates an `include!(...)` that points into the `src/includes` directory for
+/// the `windows` and `windows-sys` crates. This makes it easy to inject code into WinMD namespaces.
+#[allow(dead_code)]
+fn include_ext(relative_path: &str) -> TokenStream {
+    quote! {
+        core::include!(
+            core::concat!(
+                core::env!("CARGO_MANIFEST_DIR"),
+                "/src/includes/",
+                #relative_path
+            )
+        );
     }
+}
 
+/// Generates extension code for a specific namespace
+pub fn gen_mod(_writer: &Writer, namespace: &str) -> TokenStream {
     match namespace {
-        "Windows.Foundation.Numerics" => concat!(
-            include_str!("mod/Foundation/Numerics/Matrix3x2.rs"),
-            include_str!("mod/Foundation/Numerics/Matrix4x4.rs"),
-            include_str!("mod/Foundation/Numerics/Vector2.rs"),
-            include_str!("mod/Foundation/Numerics/Vector3.rs"),
-            include_str!("mod/Foundation/Numerics/Vector4.rs"),
-        ),
-        "Windows.Foundation" => concat!(include_str!("mod/Foundation/TimeSpan.rs"),),
-        "Windows.Win32.Foundation" => concat!(
-            include_str!("mod/Win32/Foundation/BOOL.rs"),
-            include_str!("mod/Win32/Foundation/BOOLEAN.rs"),
-            include_str!("mod/Win32/Foundation/NTSTATUS.rs"),
-            include_str!("mod/Win32/Foundation/VARIANT_BOOL.rs"),
-            include_str!("mod/Win32/Foundation/WIN32_ERROR.rs"),
-        ),
-        "Windows.Win32.Networking.WinSock" => concat!(
-            include_str!("mod/Win32/Networking/WinSock/IN_ADDR.rs"),
-            include_str!("mod/Win32/Networking/WinSock/IN6_ADDR.rs"),
-            include_str!("mod/Win32/Networking/WinSock/SOCKADDR_IN.rs"),
-            include_str!("mod/Win32/Networking/WinSock/SOCKADDR_IN6.rs"),
-            include_str!("mod/Win32/Networking/WinSock/SOCKADDR_INET.rs"),
-        ),
-        "Windows.Win32.System.Rpc" => include_str!("mod/Win32/System/Rpc/RPC_STATUS.rs"),
-        "Windows.Win32.System.Com" => include_str!("mod/Win32/System/Com/IDispatch.rs"),
         "Windows.Win32.UI.WindowsAndMessaging" => {
-            include_str!("mod/Win32/UI/WindowsAndMessaging/WindowLong.rs")
+            include_ext("Win32/UI/WindowsAndMessaging/WindowLong.rs")
         }
-        _ => "",
+
+        _ => quote!(),
     }
-    .into()
 }
 
-pub fn gen_impl(namespace: &str) -> TokenStream {
-    match namespace {
-        "Windows.Foundation.Collections" => concat!(
-            include_str!("impl/Foundation/Collections/Iterable.rs"),
-            include_str!("impl/Foundation/Collections/MapView.rs"),
-            include_str!("impl/Foundation/Collections/VectorView.rs"),
-        ),
-        _ => "",
-    }
-    .into()
+/// Generates extension code that is subject to the `implement` feature for a specific namespace
+pub fn gen_impl(_namespace: &str) -> TokenStream {
+    TokenStream::new()
 }
diff --git a/crates/libs/sys/src/Windows/Win32/UI/WindowsAndMessaging/mod.rs b/crates/libs/sys/src/Windows/Win32/UI/WindowsAndMessaging/mod.rs
index 27cf261a2e..8271e63984 100644
--- a/crates/libs/sys/src/Windows/Win32/UI/WindowsAndMessaging/mod.rs
+++ b/crates/libs/sys/src/Windows/Win32/UI/WindowsAndMessaging/mod.rs
@@ -3752,11 +3752,4 @@ pub type SENDASYNCPROC = Option<unsafe extern "system" fn(param0: super::super::
 pub type TIMERPROC = Option<unsafe extern "system" fn(param0: super::super::Foundation::HWND, param1: u32, param2: usize, param3: u32)>;
 pub type WNDENUMPROC = Option<unsafe extern "system" fn(param0: super::super::Foundation::HWND, param1: super::super::Foundation::LPARAM) -> super::super::Foundation::BOOL>;
 pub type WNDPROC = Option<unsafe extern "system" fn(param0: super::super::Foundation::HWND, param1: u32, param2: super::super::Foundation::WPARAM, param3: super::super::Foundation::LPARAM) -> super::super::Foundation::LRESULT>;
-#[cfg(target_pointer_width = "32")]
-pub use GetWindowLongA as GetWindowLongPtrA;
-#[cfg(target_pointer_width = "32")]
-pub use GetWindowLongW as GetWindowLongPtrW;
-#[cfg(target_pointer_width = "32")]
-pub use SetWindowLongA as SetWindowLongPtrA;
-#[cfg(target_pointer_width = "32")]
-pub use SetWindowLongW as SetWindowLongPtrW;
+core::include!(core::concat!(core::env!("CARGO_MANIFEST_DIR"), "/src/includes/", "Win32/UI/WindowsAndMessaging/WindowLong.rs"));
diff --git a/crates/libs/bindgen/src/rust/extensions/mod/Win32/UI/WindowsAndMessaging/WindowLong.rs b/crates/libs/sys/src/includes/Win32/UI/WindowsAndMessaging/WindowLong.rs
similarity index 100%
rename from crates/libs/bindgen/src/rust/extensions/mod/Win32/UI/WindowsAndMessaging/WindowLong.rs
rename to crates/libs/sys/src/includes/Win32/UI/WindowsAndMessaging/WindowLong.rs
diff --git a/crates/libs/windows/src/Windows/Foundation/Collections/impl.rs b/crates/libs/windows/src/Windows/Foundation/Collections/impl.rs
index 5c6ae95935..6f88940aa8 100644
--- a/crates/libs/windows/src/Windows/Foundation/Collections/impl.rs
+++ b/crates/libs/windows/src/Windows/Foundation/Collections/impl.rs
@@ -828,354 +828,3 @@ impl<T: windows_core::RuntimeType + 'static> IVectorView_Vtbl<T> {
         iid == &<IVectorView<T> as windows_core::Interface>::IID
     }
 }
-#[windows_core::implement(IIterable<T>)]
-struct StockIterable<T>
-where
-    T: windows_core::RuntimeType + 'static,
-    T::Default: Clone,
-{
-    values: Vec<T::Default>,
-}
-
-impl<T> IIterable_Impl<T> for StockIterable_Impl<T>
-where
-    T: windows_core::RuntimeType,
-    T::Default: Clone,
-{
-    fn First(&self) -> windows_core::Result<IIterator<T>> {
-        use windows_core::IUnknownImpl;
-        Ok(windows_core::ComObject::new(StockIterator { owner: self.to_object(), current: 0.into() }).into_interface())
-    }
-}
-
-#[windows_core::implement(IIterator<T>)]
-struct StockIterator<T>
-where
-    T: windows_core::RuntimeType + 'static,
-    T::Default: Clone,
-{
-    owner: windows_core::ComObject<StockIterable<T>>,
-    current: std::sync::atomic::AtomicUsize,
-}
-
-impl<T> IIterator_Impl<T> for StockIterator_Impl<T>
-where
-    T: windows_core::RuntimeType,
-    T::Default: Clone,
-{
-    fn Current(&self) -> windows_core::Result<T> {
-        let owner: &StockIterable<T> = &self.owner;
-        let current = self.current.load(std::sync::atomic::Ordering::Relaxed);
-
-        if self.owner.values.len() > current {
-            T::from_default(&owner.values[current])
-        } else {
-            Err(windows_core::Error::from(windows_core::imp::E_BOUNDS))
-        }
-    }
-
-    fn HasCurrent(&self) -> windows_core::Result<bool> {
-        let owner: &StockIterable<T> = &self.owner;
-        let current = self.current.load(std::sync::atomic::Ordering::Relaxed);
-
-        Ok(owner.values.len() > current)
-    }
-
-    fn MoveNext(&self) -> windows_core::Result<bool> {
-        let owner: &StockIterable<T> = &self.owner;
-        let current = self.current.load(std::sync::atomic::Ordering::Relaxed);
-
-        if current < owner.values.len() {
-            self.current.fetch_add(1, std::sync::atomic::Ordering::Relaxed);
-        }
-
-        Ok(owner.values.len() > current + 1)
-    }
-
-    fn GetMany(&self, values: &mut [T::Default]) -> windows_core::Result<u32> {
-        let owner: &StockIterable<T> = &self.owner;
-        let current = self.current.load(std::sync::atomic::Ordering::Relaxed);
-
-        let actual = std::cmp::min(owner.values.len() - current, values.len());
-        let (values, _) = values.split_at_mut(actual);
-        values.clone_from_slice(&owner.values[current..current + actual]);
-        self.current.fetch_add(actual, std::sync::atomic::Ordering::Relaxed);
-        Ok(actual as u32)
-    }
-}
-
-impl<T> TryFrom<Vec<T::Default>> for IIterable<T>
-where
-    T: windows_core::RuntimeType,
-    T::Default: Clone,
-{
-    type Error = windows_core::Error;
-    fn try_from(values: Vec<T::Default>) -> windows_core::Result<Self> {
-        // TODO: should provide a fallible try_into or more explicit allocator
-        Ok(windows_core::ComObject::new(StockIterable { values }).into_interface())
-    }
-}
-#[windows_core::implement(IMapView<K, V>, IIterable<IKeyValuePair<K, V>>)]
-struct StockMapView<K, V>
-where
-    K: windows_core::RuntimeType + 'static,
-    V: windows_core::RuntimeType + 'static,
-    K::Default: Clone + Ord,
-    V::Default: Clone,
-{
-    map: std::collections::BTreeMap<K::Default, V::Default>,
-}
-
-impl<K, V> IIterable_Impl<IKeyValuePair<K, V>> for StockMapView_Impl<K, V>
-where
-    K: windows_core::RuntimeType,
-    V: windows_core::RuntimeType,
-    K::Default: Clone + Ord,
-    V::Default: Clone,
-{
-    fn First(&self) -> windows_core::Result<IIterator<IKeyValuePair<K, V>>> {
-        use windows_core::IUnknownImpl;
-
-        Ok(windows_core::ComObject::new(StockMapViewIterator::<K, V> { _owner: self.to_object(), current: std::sync::RwLock::new(self.map.iter()) }).into_interface())
-    }
-}
-
-impl<K, V> IMapView_Impl<K, V> for StockMapView_Impl<K, V>
-where
-    K: windows_core::RuntimeType,
-    V: windows_core::RuntimeType,
-    K::Default: Clone + Ord,
-    V::Default: Clone,
-{
-    fn Lookup(&self, key: &K::Default) -> windows_core::Result<V> {
-        let value = self.map.get(key).ok_or_else(|| windows_core::Error::from(windows_core::imp::E_BOUNDS))?;
-        V::from_default(value)
-    }
-    fn Size(&self) -> windows_core::Result<u32> {
-        Ok(self.map.len().try_into()?)
-    }
-    fn HasKey(&self, key: &K::Default) -> windows_core::Result<bool> {
-        Ok(self.map.contains_key(key))
-    }
-    fn Split(&self, first: &mut Option<IMapView<K, V>>, second: &mut Option<IMapView<K, V>>) -> windows_core::Result<()> {
-        *first = None;
-        *second = None;
-        Ok(())
-    }
-}
-
-#[windows_core::implement(IIterator<IKeyValuePair<K, V>>)]
-struct StockMapViewIterator<'a, K, V>
-where
-    K: windows_core::RuntimeType + 'static,
-    V: windows_core::RuntimeType + 'static,
-    K::Default: Clone + Ord,
-    V::Default: Clone,
-{
-    _owner: windows_core::ComObject<StockMapView<K, V>>,
-    current: std::sync::RwLock<std::collections::btree_map::Iter<'a, K::Default, V::Default>>,
-}
-
-impl<'a, K, V> IIterator_Impl<IKeyValuePair<K, V>> for StockMapViewIterator_Impl<'a, K, V>
-where
-    K: windows_core::RuntimeType,
-    V: windows_core::RuntimeType,
-    K::Default: Clone + Ord,
-    V::Default: Clone,
-{
-    fn Current(&self) -> windows_core::Result<IKeyValuePair<K, V>> {
-        let mut current = self.current.read().unwrap().clone().peekable();
-
-        if let Some((key, value)) = current.peek() {
-            Ok(windows_core::ComObject::new(StockKeyValuePair { key: (*key).clone(), value: (*value).clone() }).into_interface())
-        } else {
-            Err(windows_core::Error::from(windows_core::imp::E_BOUNDS))
-        }
-    }
-
-    fn HasCurrent(&self) -> windows_core::Result<bool> {
-        let mut current = self.current.read().unwrap().clone().peekable();
-
-        Ok(current.peek().is_some())
-    }
-
-    fn MoveNext(&self) -> windows_core::Result<bool> {
-        let mut current = self.current.write().unwrap();
-
-        current.next();
-        Ok(current.clone().peekable().peek().is_some())
-    }
-
-    fn GetMany(&self, pairs: &mut [Option<IKeyValuePair<K, V>>]) -> windows_core::Result<u32> {
-        let mut current = self.current.write().unwrap();
-        let mut actual = 0;
-
-        for pair in pairs {
-            if let Some((key, value)) = current.next() {
-                *pair = Some(windows_core::ComObject::new(StockKeyValuePair { key: (*key).clone(), value: (*value).clone() }).into_interface());
-                actual += 1;
-            } else {
-                break;
-            }
-        }
-
-        Ok(actual)
-    }
-}
-
-#[windows_core::implement(IKeyValuePair<K, V>)]
-struct StockKeyValuePair<K, V>
-where
-    K: windows_core::RuntimeType + 'static,
-    V: windows_core::RuntimeType + 'static,
-    K::Default: Clone,
-    V::Default: Clone,
-{
-    key: K::Default,
-    value: V::Default,
-}
-
-impl<K, V> IKeyValuePair_Impl<K, V> for StockKeyValuePair_Impl<K, V>
-where
-    K: windows_core::RuntimeType,
-    V: windows_core::RuntimeType,
-    K::Default: Clone,
-    V::Default: Clone,
-{
-    fn Key(&self) -> windows_core::Result<K> {
-        K::from_default(&self.key)
-    }
-    fn Value(&self) -> windows_core::Result<V> {
-        V::from_default(&self.value)
-    }
-}
-
-impl<K, V> TryFrom<std::collections::BTreeMap<K::Default, V::Default>> for IMapView<K, V>
-where
-    K: windows_core::RuntimeType,
-    V: windows_core::RuntimeType,
-    K::Default: Clone + Ord,
-    V::Default: Clone,
-{
-    type Error = windows_core::Error;
-    fn try_from(map: std::collections::BTreeMap<K::Default, V::Default>) -> windows_core::Result<Self> {
-        // TODO: should provide a fallible try_into or more explicit allocator
-        Ok(StockMapView { map }.into())
-    }
-}
-#[windows_core::implement(IVectorView<T>, IIterable<T>)]
-struct StockVectorView<T>
-where
-    T: windows_core::RuntimeType + 'static,
-    T::Default: Clone + PartialEq,
-{
-    values: Vec<T::Default>,
-}
-
-impl<T> IIterable_Impl<T> for StockVectorView_Impl<T>
-where
-    T: windows_core::RuntimeType,
-    T::Default: Clone + PartialEq,
-{
-    fn First(&self) -> windows_core::Result<IIterator<T>> {
-        use windows_core::IUnknownImpl;
-
-        Ok(windows_core::ComObject::new(StockVectorViewIterator { owner: self.to_object(), current: 0.into() }).into_interface())
-    }
-}
-
-impl<T> IVectorView_Impl<T> for StockVectorView_Impl<T>
-where
-    T: windows_core::RuntimeType,
-    T::Default: Clone + PartialEq,
-{
-    fn GetAt(&self, index: u32) -> windows_core::Result<T> {
-        let item = self.values.get(index as usize).ok_or_else(|| windows_core::Error::from(windows_core::imp::E_BOUNDS))?;
-        T::from_default(item)
-    }
-    fn Size(&self) -> windows_core::Result<u32> {
-        Ok(self.values.len().try_into()?)
-    }
-    fn IndexOf(&self, value: &T::Default, result: &mut u32) -> windows_core::Result<bool> {
-        match self.values.iter().position(|element| element == value) {
-            Some(index) => {
-                *result = index as u32;
-                Ok(true)
-            }
-            None => Ok(false),
-        }
-    }
-    fn GetMany(&self, current: u32, values: &mut [T::Default]) -> windows_core::Result<u32> {
-        let current = current as usize;
-        if current >= self.values.len() {
-            return Ok(0);
-        }
-        let actual = std::cmp::min(self.values.len() - current, values.len());
-        let (values, _) = values.split_at_mut(actual);
-        values.clone_from_slice(&self.values[current..current + actual]);
-        Ok(actual as u32)
-    }
-}
-
-#[windows_core::implement(IIterator<T>)]
-struct StockVectorViewIterator<T>
-where
-    T: windows_core::RuntimeType + 'static,
-    T::Default: Clone + PartialEq,
-{
-    owner: windows_core::ComObject<StockVectorView<T>>,
-    current: std::sync::atomic::AtomicUsize,
-}
-
-impl<T> IIterator_Impl<T> for StockVectorViewIterator_Impl<T>
-where
-    T: windows_core::RuntimeType,
-    T::Default: Clone + PartialEq,
-{
-    fn Current(&self) -> windows_core::Result<T> {
-        let current = self.current.load(std::sync::atomic::Ordering::Relaxed);
-
-        if let Some(item) = self.owner.values.get(current) {
-            T::from_default(item)
-        } else {
-            Err(windows_core::Error::from(windows_core::imp::E_BOUNDS))
-        }
-    }
-
-    fn HasCurrent(&self) -> windows_core::Result<bool> {
-        let current = self.current.load(std::sync::atomic::Ordering::Relaxed);
-        Ok(self.owner.values.len() > current)
-    }
-
-    fn MoveNext(&self) -> windows_core::Result<bool> {
-        let current = self.current.load(std::sync::atomic::Ordering::Relaxed);
-
-        if current < self.owner.values.len() {
-            self.current.fetch_add(1, std::sync::atomic::Ordering::Relaxed);
-        }
-
-        Ok(self.owner.values.len() > current + 1)
-    }
-
-    fn GetMany(&self, values: &mut [T::Default]) -> windows_core::Result<u32> {
-        let current = self.current.load(std::sync::atomic::Ordering::Relaxed);
-
-        let actual = std::cmp::min(self.owner.values.len() - current, values.len());
-        let (values, _) = values.split_at_mut(actual);
-        values.clone_from_slice(&self.owner.values[current..current + actual]);
-        self.current.fetch_add(actual, std::sync::atomic::Ordering::Relaxed);
-        Ok(actual as u32)
-    }
-}
-
-impl<T> TryFrom<Vec<T::Default>> for IVectorView<T>
-where
-    T: windows_core::RuntimeType,
-    T::Default: Clone + PartialEq,
-{
-    type Error = windows_core::Error;
-    fn try_from(values: Vec<T::Default>) -> windows_core::Result<Self> {
-        // TODO: should provide a fallible try_into or more explicit allocator
-        Ok(windows_core::ComObject::new(StockVectorView { values }).into_interface())
-    }
-}
diff --git a/crates/libs/windows/src/Windows/Foundation/Numerics/mod.rs b/crates/libs/windows/src/Windows/Foundation/Numerics/mod.rs
index a2746505e1..034ee20625 100644
--- a/crates/libs/windows/src/Windows/Foundation/Numerics/mod.rs
+++ b/crates/libs/windows/src/Windows/Foundation/Numerics/mod.rs
@@ -157,911 +157,3 @@ impl Default for Vector4 {
         unsafe { core::mem::zeroed() }
     }
 }
-impl Matrix3x2 {
-    pub const fn identity() -> Self {
-        Self { M11: 1.0, M12: 0.0, M21: 0.0, M22: 1.0, M31: 0.0, M32: 0.0 }
-    }
-    pub const fn translation(x: f32, y: f32) -> Self {
-        Self { M11: 1.0, M12: 0.0, M21: 0.0, M22: 1.0, M31: x, M32: y }
-    }
-    pub fn rotation(angle: f32, x: f32, y: f32) -> Self {
-        #[repr(C)]
-        pub struct D2D_POINT_2F {
-            pub x: f32,
-            pub y: f32,
-        }
-        windows_targets::link!("d2d1.dll" "system" fn D2D1MakeRotateMatrix(angle: f32, center: D2D_POINT_2F, matrix: *mut Matrix3x2));
-        let mut matrix = Self::default();
-        unsafe {
-            D2D1MakeRotateMatrix(angle, D2D_POINT_2F { x, y }, &mut matrix);
-        }
-        matrix
-    }
-    fn impl_add(&self, rhs: &Self) -> Self {
-        Self {
-            M11: self.M11 + rhs.M11,
-            M12: self.M12 + rhs.M12,
-            M21: self.M21 + rhs.M21,
-            M22: self.M22 + rhs.M22,
-            M31: self.M31 + rhs.M31,
-            M32: self.M32 + rhs.M32,
-        }
-    }
-    fn impl_sub(&self, rhs: &Self) -> Self {
-        Self {
-            M11: self.M11 - rhs.M11,
-            M12: self.M12 - rhs.M12,
-            M21: self.M21 - rhs.M21,
-            M22: self.M22 - rhs.M22,
-            M31: self.M31 - rhs.M31,
-            M32: self.M32 - rhs.M32,
-        }
-    }
-    fn impl_mul(&self, rhs: &Self) -> Self {
-        Self {
-            M11: self.M11 * rhs.M11 + self.M12 * rhs.M21,
-            M12: self.M11 * rhs.M12 + self.M12 * rhs.M22,
-            M21: self.M21 * rhs.M11 + self.M22 * rhs.M21,
-            M22: self.M21 * rhs.M12 + self.M22 * rhs.M22,
-            M31: self.M31 * rhs.M11 + self.M32 * rhs.M21 + rhs.M31,
-            M32: self.M31 * rhs.M12 + self.M32 * rhs.M22 + rhs.M32,
-        }
-    }
-    fn impl_mul_f32(&self, rhs: f32) -> Self {
-        Self { M11: self.M11 * rhs, M12: self.M12 * rhs, M21: self.M21 * rhs, M22: self.M22 * rhs, M31: self.M31 * rhs, M32: self.M32 * rhs }
-    }
-}
-
-impl core::ops::Add<Matrix3x2> for Matrix3x2 {
-    type Output = Matrix3x2;
-    fn add(self, rhs: Matrix3x2) -> Matrix3x2 {
-        self.impl_add(&rhs)
-    }
-}
-impl core::ops::Add<&Matrix3x2> for Matrix3x2 {
-    type Output = Matrix3x2;
-    fn add(self, rhs: &Matrix3x2) -> Matrix3x2 {
-        self.impl_add(rhs)
-    }
-}
-impl core::ops::Add<Matrix3x2> for &Matrix3x2 {
-    type Output = Matrix3x2;
-    fn add(self, rhs: Matrix3x2) -> Matrix3x2 {
-        self.impl_add(&rhs)
-    }
-}
-impl core::ops::Add<&Matrix3x2> for &Matrix3x2 {
-    type Output = Matrix3x2;
-    fn add(self, rhs: &Matrix3x2) -> Matrix3x2 {
-        self.impl_add(rhs)
-    }
-}
-impl core::ops::Sub<Matrix3x2> for Matrix3x2 {
-    type Output = Matrix3x2;
-    fn sub(self, rhs: Matrix3x2) -> Matrix3x2 {
-        self.impl_sub(&rhs)
-    }
-}
-impl core::ops::Sub<&Matrix3x2> for Matrix3x2 {
-    type Output = Matrix3x2;
-    fn sub(self, rhs: &Matrix3x2) -> Matrix3x2 {
-        self.impl_sub(rhs)
-    }
-}
-impl core::ops::Sub<Matrix3x2> for &Matrix3x2 {
-    type Output = Matrix3x2;
-    fn sub(self, rhs: Matrix3x2) -> Matrix3x2 {
-        self.impl_sub(&rhs)
-    }
-}
-impl core::ops::Sub<&Matrix3x2> for &Matrix3x2 {
-    type Output = Matrix3x2;
-    fn sub(self, rhs: &Matrix3x2) -> Matrix3x2 {
-        self.impl_sub(rhs)
-    }
-}
-impl core::ops::Mul<Matrix3x2> for Matrix3x2 {
-    type Output = Matrix3x2;
-    fn mul(self, rhs: Matrix3x2) -> Matrix3x2 {
-        self.impl_mul(&rhs)
-    }
-}
-impl core::ops::Mul<&Matrix3x2> for Matrix3x2 {
-    type Output = Matrix3x2;
-    fn mul(self, rhs: &Matrix3x2) -> Matrix3x2 {
-        self.impl_mul(rhs)
-    }
-}
-impl core::ops::Mul<Matrix3x2> for &Matrix3x2 {
-    type Output = Matrix3x2;
-    fn mul(self, rhs: Matrix3x2) -> Matrix3x2 {
-        self.impl_mul(&rhs)
-    }
-}
-impl core::ops::Mul<&Matrix3x2> for &Matrix3x2 {
-    type Output = Matrix3x2;
-    fn mul(self, rhs: &Matrix3x2) -> Matrix3x2 {
-        self.impl_mul(rhs)
-    }
-}
-impl core::ops::Mul<f32> for Matrix3x2 {
-    type Output = Matrix3x2;
-    fn mul(self, rhs: f32) -> Matrix3x2 {
-        self.impl_mul_f32(rhs)
-    }
-}
-impl core::ops::Mul<f32> for &Matrix3x2 {
-    type Output = Matrix3x2;
-    fn mul(self, rhs: f32) -> Matrix3x2 {
-        self.impl_mul_f32(rhs)
-    }
-}
-impl Matrix4x4 {
-    pub const fn translation(x: f32, y: f32, z: f32) -> Self {
-        Self {
-            M11: 1.0,
-            M12: 0.0,
-            M13: 0.0,
-            M14: 0.0,
-            M21: 0.0,
-            M22: 1.0,
-            M23: 0.0,
-            M24: 0.0,
-            M31: 0.0,
-            M32: 0.0,
-            M33: 1.0,
-            M34: 0.0,
-            M41: x,
-            M42: y,
-            M43: z,
-            M44: 1.0,
-        }
-    }
-    pub fn rotation_y(degree: f32) -> Self {
-        windows_targets::link!("d2d1.dll" "system" fn D2D1SinCos(angle: f32, sin: *mut f32, cos: *mut f32));
-        let angle = degree * (3.141592654 / 180.0);
-        let mut sin = 0.0;
-        let mut cos = 0.0;
-        unsafe {
-            D2D1SinCos(angle, &mut sin, &mut cos);
-        }
-        Self {
-            M11: cos,
-            M12: 0.0,
-            M13: -sin,
-            M14: 0.0,
-            M21: 0.0,
-            M22: 1.0,
-            M23: 0.0,
-            M24: 0.0,
-            M31: sin,
-            M32: 0.0,
-            M33: cos,
-            M34: 0.0,
-            M41: 0.0,
-            M42: 0.0,
-            M43: 0.0,
-            M44: 1.0,
-        }
-    }
-    pub fn perspective_projection(depth: f32) -> Self {
-        let projection = if depth > 0.0 { -1.0 / depth } else { 0.0 };
-        Self {
-            M11: 1.0,
-            M12: 0.0,
-            M13: 0.0,
-            M14: 0.0,
-            M21: 0.0,
-            M22: 1.0,
-            M23: 0.0,
-            M24: 0.0,
-            M31: 0.0,
-            M32: 0.0,
-            M33: 1.0,
-            M34: projection,
-            M41: 0.0,
-            M42: 0.0,
-            M43: 0.0,
-            M44: 1.0,
-        }
-    }
-    fn impl_add(&self, rhs: &Self) -> Self {
-        Self {
-            M11: self.M11 + rhs.M11,
-            M12: self.M12 + rhs.M12,
-            M13: self.M13 + rhs.M13,
-            M14: self.M14 + rhs.M14,
-            M21: self.M21 + rhs.M21,
-            M22: self.M22 + rhs.M22,
-            M23: self.M23 + rhs.M23,
-            M24: self.M24 + rhs.M24,
-            M31: self.M31 + rhs.M31,
-            M32: self.M32 + rhs.M32,
-            M33: self.M33 + rhs.M33,
-            M34: self.M34 + rhs.M34,
-            M41: self.M41 + rhs.M41,
-            M42: self.M42 + rhs.M42,
-            M43: self.M43 + rhs.M43,
-            M44: self.M44 + rhs.M44,
-        }
-    }
-    fn impl_sub(&self, rhs: &Self) -> Self {
-        Self {
-            M11: self.M11 - rhs.M11,
-            M12: self.M12 - rhs.M12,
-            M13: self.M13 - rhs.M13,
-            M14: self.M14 - rhs.M14,
-            M21: self.M21 - rhs.M21,
-            M22: self.M22 - rhs.M22,
-            M23: self.M23 - rhs.M23,
-            M24: self.M24 - rhs.M24,
-            M31: self.M31 - rhs.M31,
-            M32: self.M32 - rhs.M32,
-            M33: self.M33 - rhs.M33,
-            M34: self.M34 - rhs.M34,
-            M41: self.M41 - rhs.M41,
-            M42: self.M42 - rhs.M42,
-            M43: self.M43 - rhs.M43,
-            M44: self.M44 - rhs.M44,
-        }
-    }
-    fn impl_mul(&self, rhs: &Self) -> Self {
-        Self {
-            M11: self.M11 * rhs.M11 + self.M12 * rhs.M21 + self.M13 * rhs.M31 + self.M14 * rhs.M41,
-            M12: self.M11 * rhs.M12 + self.M12 * rhs.M22 + self.M13 * rhs.M32 + self.M14 * rhs.M42,
-            M13: self.M11 * rhs.M13 + self.M12 * rhs.M23 + self.M13 * rhs.M33 + self.M14 * rhs.M43,
-            M14: self.M11 * rhs.M14 + self.M12 * rhs.M24 + self.M13 * rhs.M34 + self.M14 * rhs.M44,
-            M21: self.M21 * rhs.M11 + self.M22 * rhs.M21 + self.M23 * rhs.M31 + self.M24 * rhs.M41,
-            M22: self.M21 * rhs.M12 + self.M22 * rhs.M22 + self.M23 * rhs.M32 + self.M24 * rhs.M42,
-            M23: self.M21 * rhs.M13 + self.M22 * rhs.M23 + self.M23 * rhs.M33 + self.M24 * rhs.M43,
-            M24: self.M21 * rhs.M14 + self.M22 * rhs.M24 + self.M23 * rhs.M34 + self.M24 * rhs.M44,
-            M31: self.M31 * rhs.M11 + self.M32 * rhs.M21 + self.M33 * rhs.M31 + self.M34 * rhs.M41,
-            M32: self.M31 * rhs.M12 + self.M32 * rhs.M22 + self.M33 * rhs.M32 + self.M34 * rhs.M42,
-            M33: self.M31 * rhs.M13 + self.M32 * rhs.M23 + self.M33 * rhs.M33 + self.M34 * rhs.M43,
-            M34: self.M31 * rhs.M14 + self.M32 * rhs.M24 + self.M33 * rhs.M34 + self.M34 * rhs.M44,
-            M41: self.M41 * rhs.M11 + self.M42 * rhs.M21 + self.M43 * rhs.M31 + self.M44 * rhs.M41,
-            M42: self.M41 * rhs.M12 + self.M42 * rhs.M22 + self.M43 * rhs.M32 + self.M44 * rhs.M42,
-            M43: self.M41 * rhs.M13 + self.M42 * rhs.M23 + self.M43 * rhs.M33 + self.M44 * rhs.M43,
-            M44: self.M41 * rhs.M14 + self.M42 * rhs.M24 + self.M43 * rhs.M34 + self.M44 * rhs.M44,
-        }
-    }
-    fn impl_mul_f32(&self, rhs: f32) -> Self {
-        Self {
-            M11: self.M11 * rhs,
-            M12: self.M12 * rhs,
-            M13: self.M13 * rhs,
-            M14: self.M14 * rhs,
-            M21: self.M21 * rhs,
-            M22: self.M22 * rhs,
-            M23: self.M23 * rhs,
-            M24: self.M24 * rhs,
-            M31: self.M31 * rhs,
-            M32: self.M32 * rhs,
-            M33: self.M33 * rhs,
-            M34: self.M34 * rhs,
-            M41: self.M41 * rhs,
-            M42: self.M42 * rhs,
-            M43: self.M43 * rhs,
-            M44: self.M44 * rhs,
-        }
-    }
-}
-
-impl core::ops::Add<Matrix4x4> for Matrix4x4 {
-    type Output = Matrix4x4;
-    fn add(self, rhs: Matrix4x4) -> Matrix4x4 {
-        self.impl_add(&rhs)
-    }
-}
-impl core::ops::Add<&Matrix4x4> for Matrix4x4 {
-    type Output = Matrix4x4;
-    fn add(self, rhs: &Matrix4x4) -> Matrix4x4 {
-        self.impl_add(rhs)
-    }
-}
-impl core::ops::Add<Matrix4x4> for &Matrix4x4 {
-    type Output = Matrix4x4;
-    fn add(self, rhs: Matrix4x4) -> Matrix4x4 {
-        self.impl_add(&rhs)
-    }
-}
-impl core::ops::Add<&Matrix4x4> for &Matrix4x4 {
-    type Output = Matrix4x4;
-    fn add(self, rhs: &Matrix4x4) -> Matrix4x4 {
-        self.impl_add(rhs)
-    }
-}
-impl core::ops::Sub<Matrix4x4> for Matrix4x4 {
-    type Output = Matrix4x4;
-    fn sub(self, rhs: Matrix4x4) -> Matrix4x4 {
-        self.impl_sub(&rhs)
-    }
-}
-impl core::ops::Sub<&Matrix4x4> for Matrix4x4 {
-    type Output = Matrix4x4;
-    fn sub(self, rhs: &Matrix4x4) -> Matrix4x4 {
-        self.impl_sub(rhs)
-    }
-}
-impl core::ops::Sub<Matrix4x4> for &Matrix4x4 {
-    type Output = Matrix4x4;
-    fn sub(self, rhs: Matrix4x4) -> Matrix4x4 {
-        self.impl_sub(&rhs)
-    }
-}
-impl core::ops::Sub<&Matrix4x4> for &Matrix4x4 {
-    type Output = Matrix4x4;
-    fn sub(self, rhs: &Matrix4x4) -> Matrix4x4 {
-        self.impl_sub(rhs)
-    }
-}
-impl core::ops::Mul<Matrix4x4> for Matrix4x4 {
-    type Output = Matrix4x4;
-    fn mul(self, rhs: Matrix4x4) -> Matrix4x4 {
-        self.impl_mul(&rhs)
-    }
-}
-impl core::ops::Mul<&Matrix4x4> for Matrix4x4 {
-    type Output = Matrix4x4;
-    fn mul(self, rhs: &Matrix4x4) -> Matrix4x4 {
-        self.impl_mul(rhs)
-    }
-}
-impl core::ops::Mul<Matrix4x4> for &Matrix4x4 {
-    type Output = Matrix4x4;
-    fn mul(self, rhs: Matrix4x4) -> Matrix4x4 {
-        self.impl_mul(&rhs)
-    }
-}
-impl core::ops::Mul<&Matrix4x4> for &Matrix4x4 {
-    type Output = Matrix4x4;
-    fn mul(self, rhs: &Matrix4x4) -> Matrix4x4 {
-        self.impl_mul(rhs)
-    }
-}
-impl core::ops::Mul<f32> for Matrix4x4 {
-    type Output = Matrix4x4;
-    fn mul(self, rhs: f32) -> Matrix4x4 {
-        self.impl_mul_f32(rhs)
-    }
-}
-impl core::ops::Mul<f32> for &Matrix4x4 {
-    type Output = Matrix4x4;
-    fn mul(self, rhs: f32) -> Matrix4x4 {
-        self.impl_mul_f32(rhs)
-    }
-}
-impl Vector2 {
-    pub fn new(X: f32, Y: f32) -> Self {
-        Self { X, Y }
-    }
-    pub fn zero() -> Self {
-        Self { X: 0f32, Y: 0f32 }
-    }
-    pub fn one() -> Self {
-        Self { X: 1f32, Y: 1f32 }
-    }
-    pub fn unit_x() -> Self {
-        Self { X: 1.0, Y: 0.0 }
-    }
-    pub fn unit_y() -> Self {
-        Self { X: 0.0, Y: 1.0 }
-    }
-    pub fn dot(&self, rhs: &Self) -> f32 {
-        self.X * rhs.X + self.Y * rhs.Y
-    }
-    pub fn length_squared(&self) -> f32 {
-        self.dot(self)
-    }
-    pub fn length(&self) -> f32 {
-        self.length_squared().sqrt()
-    }
-    pub fn distance(&self, value: &Self) -> f32 {
-        (self - value).length()
-    }
-    pub fn distance_squared(&self, value: &Self) -> f32 {
-        (self - value).length_squared()
-    }
-    pub fn normalize(&self) -> Self {
-        self / self.length()
-    }
-
-    fn impl_add(&self, rhs: &Self) -> Self {
-        Self { X: self.X + rhs.X, Y: self.Y + rhs.Y }
-    }
-    fn impl_sub(&self, rhs: &Self) -> Self {
-        Self { X: self.X - rhs.X, Y: self.Y - rhs.Y }
-    }
-    fn impl_div(&self, rhs: &Self) -> Self {
-        Self { X: self.X / rhs.X, Y: self.Y / rhs.Y }
-    }
-    fn impl_div_f32(&self, rhs: f32) -> Self {
-        Self { X: self.X / rhs, Y: self.Y / rhs }
-    }
-    fn impl_mul(&self, rhs: &Self) -> Self {
-        Self { X: self.X * rhs.X, Y: self.Y * rhs.Y }
-    }
-    fn impl_mul_f32(&self, rhs: f32) -> Self {
-        Self { X: self.X * rhs, Y: self.Y * rhs }
-    }
-}
-
-impl core::ops::Add<Vector2> for Vector2 {
-    type Output = Vector2;
-    fn add(self, rhs: Vector2) -> Vector2 {
-        self.impl_add(&rhs)
-    }
-}
-impl core::ops::Add<&Vector2> for Vector2 {
-    type Output = Vector2;
-    fn add(self, rhs: &Vector2) -> Vector2 {
-        self.impl_add(rhs)
-    }
-}
-impl core::ops::Add<Vector2> for &Vector2 {
-    type Output = Vector2;
-    fn add(self, rhs: Vector2) -> Vector2 {
-        self.impl_add(&rhs)
-    }
-}
-impl core::ops::Add<&Vector2> for &Vector2 {
-    type Output = Vector2;
-    fn add(self, rhs: &Vector2) -> Vector2 {
-        self.impl_add(rhs)
-    }
-}
-impl core::ops::Sub<Vector2> for Vector2 {
-    type Output = Vector2;
-    fn sub(self, rhs: Vector2) -> Vector2 {
-        self.impl_sub(&rhs)
-    }
-}
-impl core::ops::Sub<&Vector2> for Vector2 {
-    type Output = Vector2;
-    fn sub(self, rhs: &Vector2) -> Vector2 {
-        self.impl_sub(rhs)
-    }
-}
-impl core::ops::Sub<Vector2> for &Vector2 {
-    type Output = Vector2;
-    fn sub(self, rhs: Vector2) -> Vector2 {
-        self.impl_sub(&rhs)
-    }
-}
-impl core::ops::Sub<&Vector2> for &Vector2 {
-    type Output = Vector2;
-    fn sub(self, rhs: &Vector2) -> Vector2 {
-        self.impl_sub(rhs)
-    }
-}
-impl core::ops::Div<Vector2> for Vector2 {
-    type Output = Vector2;
-    fn div(self, rhs: Vector2) -> Vector2 {
-        self.impl_div(&rhs)
-    }
-}
-impl core::ops::Div<&Vector2> for Vector2 {
-    type Output = Vector2;
-    fn div(self, rhs: &Vector2) -> Vector2 {
-        self.impl_div(rhs)
-    }
-}
-impl core::ops::Div<Vector2> for &Vector2 {
-    type Output = Vector2;
-    fn div(self, rhs: Vector2) -> Vector2 {
-        self.impl_div(&rhs)
-    }
-}
-impl core::ops::Div<&Vector2> for &Vector2 {
-    type Output = Vector2;
-    fn div(self, rhs: &Vector2) -> Vector2 {
-        self.impl_div(rhs)
-    }
-}
-impl core::ops::Div<f32> for Vector2 {
-    type Output = Vector2;
-    fn div(self, rhs: f32) -> Vector2 {
-        self.impl_div_f32(rhs)
-    }
-}
-impl core::ops::Div<f32> for &Vector2 {
-    type Output = Vector2;
-    fn div(self, rhs: f32) -> Vector2 {
-        self.impl_div_f32(rhs)
-    }
-}
-impl core::ops::Mul<Vector2> for Vector2 {
-    type Output = Vector2;
-    fn mul(self, rhs: Vector2) -> Vector2 {
-        self.impl_mul(&rhs)
-    }
-}
-impl core::ops::Mul<&Vector2> for Vector2 {
-    type Output = Vector2;
-    fn mul(self, rhs: &Vector2) -> Vector2 {
-        self.impl_mul(rhs)
-    }
-}
-impl core::ops::Mul<Vector2> for &Vector2 {
-    type Output = Vector2;
-    fn mul(self, rhs: Vector2) -> Vector2 {
-        self.impl_mul(&rhs)
-    }
-}
-impl core::ops::Mul<&Vector2> for &Vector2 {
-    type Output = Vector2;
-    fn mul(self, rhs: &Vector2) -> Vector2 {
-        self.impl_mul(rhs)
-    }
-}
-impl core::ops::Mul<f32> for Vector2 {
-    type Output = Vector2;
-    fn mul(self, rhs: f32) -> Vector2 {
-        self.impl_mul_f32(rhs)
-    }
-}
-impl core::ops::Mul<f32> for &Vector2 {
-    type Output = Vector2;
-    fn mul(self, rhs: f32) -> Vector2 {
-        self.impl_mul_f32(rhs)
-    }
-}
-impl Vector3 {
-    pub fn new(X: f32, Y: f32, Z: f32) -> Self {
-        Self { X, Y, Z }
-    }
-    pub fn zero() -> Self {
-        Self { X: 0f32, Y: 0f32, Z: 0f32 }
-    }
-    pub fn one() -> Self {
-        Self { X: 1f32, Y: 1f32, Z: 1f32 }
-    }
-    pub fn unit_x() -> Self {
-        Self { X: 1.0, Y: 0.0, Z: 0.0 }
-    }
-    pub fn unit_y() -> Self {
-        Self { X: 0.0, Y: 1.0, Z: 0.0 }
-    }
-    pub fn unit_z() -> Self {
-        Self { X: 0.0, Y: 0.0, Z: 1.0 }
-    }
-    pub fn dot(&self, rhs: &Self) -> f32 {
-        self.X * rhs.X + self.Y * rhs.Y + self.Z * rhs.Z
-    }
-    pub fn length_squared(&self) -> f32 {
-        self.dot(self)
-    }
-    pub fn length(&self) -> f32 {
-        self.length_squared().sqrt()
-    }
-    pub fn distance(&self, value: &Self) -> f32 {
-        (self - value).length()
-    }
-    pub fn distance_squared(&self, value: &Self) -> f32 {
-        (self - value).length_squared()
-    }
-    pub fn normalize(&self) -> Self {
-        self / self.length()
-    }
-
-    fn impl_add(&self, rhs: &Self) -> Self {
-        Self { X: self.X + rhs.X, Y: self.Y + rhs.Y, Z: self.Z + rhs.Z }
-    }
-    fn impl_sub(&self, rhs: &Self) -> Self {
-        Self { X: self.X - rhs.X, Y: self.Y - rhs.Y, Z: self.Z - rhs.Z }
-    }
-    fn impl_div(&self, rhs: &Self) -> Self {
-        Self { X: self.X / rhs.X, Y: self.Y / rhs.Y, Z: self.Z / rhs.Z }
-    }
-    fn impl_div_f32(&self, rhs: f32) -> Self {
-        Self { X: self.X / rhs, Y: self.Y / rhs, Z: self.Z / rhs }
-    }
-    fn impl_mul(&self, rhs: &Self) -> Self {
-        Self { X: self.X * rhs.X, Y: self.Y * rhs.Y, Z: self.Z * rhs.Z }
-    }
-    fn impl_mul_f32(&self, rhs: f32) -> Self {
-        Self { X: self.X * rhs, Y: self.Y * rhs, Z: self.Z * rhs }
-    }
-}
-
-impl core::ops::Add<Vector3> for Vector3 {
-    type Output = Vector3;
-    fn add(self, rhs: Vector3) -> Vector3 {
-        self.impl_add(&rhs)
-    }
-}
-impl core::ops::Add<&Vector3> for Vector3 {
-    type Output = Vector3;
-    fn add(self, rhs: &Vector3) -> Vector3 {
-        self.impl_add(rhs)
-    }
-}
-impl core::ops::Add<Vector3> for &Vector3 {
-    type Output = Vector3;
-    fn add(self, rhs: Vector3) -> Vector3 {
-        self.impl_add(&rhs)
-    }
-}
-impl core::ops::Add<&Vector3> for &Vector3 {
-    type Output = Vector3;
-    fn add(self, rhs: &Vector3) -> Vector3 {
-        self.impl_add(rhs)
-    }
-}
-impl core::ops::Sub<Vector3> for Vector3 {
-    type Output = Vector3;
-    fn sub(self, rhs: Vector3) -> Vector3 {
-        self.impl_sub(&rhs)
-    }
-}
-impl core::ops::Sub<&Vector3> for Vector3 {
-    type Output = Vector3;
-    fn sub(self, rhs: &Vector3) -> Vector3 {
-        self.impl_sub(rhs)
-    }
-}
-impl core::ops::Sub<Vector3> for &Vector3 {
-    type Output = Vector3;
-    fn sub(self, rhs: Vector3) -> Vector3 {
-        self.impl_sub(&rhs)
-    }
-}
-impl core::ops::Sub<&Vector3> for &Vector3 {
-    type Output = Vector3;
-    fn sub(self, rhs: &Vector3) -> Vector3 {
-        self.impl_sub(rhs)
-    }
-}
-impl core::ops::Div<Vector3> for Vector3 {
-    type Output = Vector3;
-    fn div(self, rhs: Vector3) -> Vector3 {
-        self.impl_div(&rhs)
-    }
-}
-impl core::ops::Div<&Vector3> for Vector3 {
-    type Output = Vector3;
-    fn div(self, rhs: &Vector3) -> Vector3 {
-        self.impl_div(rhs)
-    }
-}
-impl core::ops::Div<Vector3> for &Vector3 {
-    type Output = Vector3;
-    fn div(self, rhs: Vector3) -> Vector3 {
-        self.impl_div(&rhs)
-    }
-}
-impl core::ops::Div<&Vector3> for &Vector3 {
-    type Output = Vector3;
-    fn div(self, rhs: &Vector3) -> Vector3 {
-        self.impl_div(rhs)
-    }
-}
-impl core::ops::Div<f32> for Vector3 {
-    type Output = Vector3;
-    fn div(self, rhs: f32) -> Vector3 {
-        self.impl_div_f32(rhs)
-    }
-}
-impl core::ops::Div<f32> for &Vector3 {
-    type Output = Vector3;
-    fn div(self, rhs: f32) -> Vector3 {
-        self.impl_div_f32(rhs)
-    }
-}
-impl core::ops::Mul<Vector3> for Vector3 {
-    type Output = Vector3;
-    fn mul(self, rhs: Vector3) -> Vector3 {
-        self.impl_mul(&rhs)
-    }
-}
-impl core::ops::Mul<&Vector3> for Vector3 {
-    type Output = Vector3;
-    fn mul(self, rhs: &Vector3) -> Vector3 {
-        self.impl_mul(rhs)
-    }
-}
-impl core::ops::Mul<Vector3> for &Vector3 {
-    type Output = Vector3;
-    fn mul(self, rhs: Vector3) -> Vector3 {
-        self.impl_mul(&rhs)
-    }
-}
-impl core::ops::Mul<&Vector3> for &Vector3 {
-    type Output = Vector3;
-    fn mul(self, rhs: &Vector3) -> Vector3 {
-        self.impl_mul(rhs)
-    }
-}
-impl core::ops::Mul<f32> for Vector3 {
-    type Output = Vector3;
-    fn mul(self, rhs: f32) -> Vector3 {
-        self.impl_mul_f32(rhs)
-    }
-}
-impl core::ops::Mul<f32> for &Vector3 {
-    type Output = Vector3;
-    fn mul(self, rhs: f32) -> Vector3 {
-        self.impl_mul_f32(rhs)
-    }
-}
-impl Vector4 {
-    pub fn new(X: f32, Y: f32, Z: f32, W: f32) -> Self {
-        Self { X, Y, Z, W }
-    }
-    pub fn zero() -> Self {
-        Self { X: 0f32, Y: 0f32, Z: 0f32, W: 0f32 }
-    }
-    pub fn one() -> Self {
-        Self { X: 1f32, Y: 1f32, Z: 1f32, W: 1f32 }
-    }
-    pub fn unit_x() -> Self {
-        Self { X: 1.0, Y: 0.0, Z: 0.0, W: 0.0 }
-    }
-    pub fn unit_y() -> Self {
-        Self { X: 0.0, Y: 1.0, Z: 0.0, W: 0.0 }
-    }
-    pub fn unit_z() -> Self {
-        Self { X: 0.0, Y: 0.0, Z: 1.0, W: 0.0 }
-    }
-    pub fn unit_w() -> Self {
-        Self { X: 0.0, Y: 0.0, Z: 0.0, W: 1.0 }
-    }
-    pub fn dot(&self, rhs: &Self) -> f32 {
-        self.X * rhs.X + self.Y * rhs.Y + self.Z * rhs.Z + self.W * rhs.W
-    }
-    pub fn length_squared(&self) -> f32 {
-        self.dot(self)
-    }
-    pub fn length(&self) -> f32 {
-        self.length_squared().sqrt()
-    }
-    pub fn distance(&self, value: &Self) -> f32 {
-        (self - value).length()
-    }
-    pub fn distance_squared(&self, value: &Self) -> f32 {
-        (self - value).length_squared()
-    }
-    pub fn normalize(&self) -> Self {
-        self / self.length()
-    }
-
-    fn impl_add(&self, rhs: &Self) -> Self {
-        Self { X: self.X + rhs.X, Y: self.Y + rhs.Y, Z: self.Z + rhs.Z, W: self.W + rhs.W }
-    }
-    fn impl_sub(&self, rhs: &Self) -> Self {
-        Self { X: self.X - rhs.X, Y: self.Y - rhs.Y, Z: self.Z - rhs.Z, W: self.W - rhs.W }
-    }
-    fn impl_div(&self, rhs: &Self) -> Self {
-        Self { X: self.X / rhs.X, Y: self.Y / rhs.Y, Z: self.Z / rhs.Z, W: self.W / rhs.W }
-    }
-    fn impl_div_f32(&self, rhs: f32) -> Self {
-        Self { X: self.X / rhs, Y: self.Y / rhs, Z: self.Z / rhs, W: self.W / rhs }
-    }
-    fn impl_mul(&self, rhs: &Self) -> Self {
-        Self { X: self.X * rhs.X, Y: self.Y * rhs.Y, Z: self.Z * rhs.Z, W: self.W * rhs.W }
-    }
-    fn impl_mul_f32(&self, rhs: f32) -> Self {
-        Self { X: self.X * rhs, Y: self.Y * rhs, Z: self.Z * rhs, W: self.W * rhs }
-    }
-}
-
-impl core::ops::Add<Vector4> for Vector4 {
-    type Output = Vector4;
-    fn add(self, rhs: Vector4) -> Vector4 {
-        self.impl_add(&rhs)
-    }
-}
-impl core::ops::Add<&Vector4> for Vector4 {
-    type Output = Vector4;
-    fn add(self, rhs: &Vector4) -> Vector4 {
-        self.impl_add(rhs)
-    }
-}
-impl core::ops::Add<Vector4> for &Vector4 {
-    type Output = Vector4;
-    fn add(self, rhs: Vector4) -> Vector4 {
-        self.impl_add(&rhs)
-    }
-}
-impl core::ops::Add<&Vector4> for &Vector4 {
-    type Output = Vector4;
-    fn add(self, rhs: &Vector4) -> Vector4 {
-        self.impl_add(rhs)
-    }
-}
-impl core::ops::Sub<Vector4> for Vector4 {
-    type Output = Vector4;
-    fn sub(self, rhs: Vector4) -> Vector4 {
-        self.impl_sub(&rhs)
-    }
-}
-impl core::ops::Sub<&Vector4> for Vector4 {
-    type Output = Vector4;
-    fn sub(self, rhs: &Vector4) -> Vector4 {
-        self.impl_sub(rhs)
-    }
-}
-impl core::ops::Sub<Vector4> for &Vector4 {
-    type Output = Vector4;
-    fn sub(self, rhs: Vector4) -> Vector4 {
-        self.impl_sub(&rhs)
-    }
-}
-impl core::ops::Sub<&Vector4> for &Vector4 {
-    type Output = Vector4;
-    fn sub(self, rhs: &Vector4) -> Vector4 {
-        self.impl_sub(rhs)
-    }
-}
-impl core::ops::Div<Vector4> for Vector4 {
-    type Output = Vector4;
-    fn div(self, rhs: Vector4) -> Vector4 {
-        self.impl_div(&rhs)
-    }
-}
-impl core::ops::Div<&Vector4> for Vector4 {
-    type Output = Vector4;
-    fn div(self, rhs: &Vector4) -> Vector4 {
-        self.impl_div(rhs)
-    }
-}
-impl core::ops::Div<Vector4> for &Vector4 {
-    type Output = Vector4;
-    fn div(self, rhs: Vector4) -> Vector4 {
-        self.impl_div(&rhs)
-    }
-}
-impl core::ops::Div<&Vector4> for &Vector4 {
-    type Output = Vector4;
-    fn div(self, rhs: &Vector4) -> Vector4 {
-        self.impl_div(rhs)
-    }
-}
-impl core::ops::Div<f32> for Vector4 {
-    type Output = Vector4;
-    fn div(self, rhs: f32) -> Vector4 {
-        self.impl_div_f32(rhs)
-    }
-}
-impl core::ops::Div<f32> for &Vector4 {
-    type Output = Vector4;
-    fn div(self, rhs: f32) -> Vector4 {
-        self.impl_div_f32(rhs)
-    }
-}
-impl core::ops::Mul<Vector4> for Vector4 {
-    type Output = Vector4;
-    fn mul(self, rhs: Vector4) -> Vector4 {
-        self.impl_mul(&rhs)
-    }
-}
-impl core::ops::Mul<&Vector4> for Vector4 {
-    type Output = Vector4;
-    fn mul(self, rhs: &Vector4) -> Vector4 {
-        self.impl_mul(rhs)
-    }
-}
-impl core::ops::Mul<Vector4> for &Vector4 {
-    type Output = Vector4;
-    fn mul(self, rhs: Vector4) -> Vector4 {
-        self.impl_mul(&rhs)
-    }
-}
-impl core::ops::Mul<&Vector4> for &Vector4 {
-    type Output = Vector4;
-    fn mul(self, rhs: &Vector4) -> Vector4 {
-        self.impl_mul(rhs)
-    }
-}
-impl core::ops::Mul<f32> for Vector4 {
-    type Output = Vector4;
-    fn mul(self, rhs: f32) -> Vector4 {
-        self.impl_mul_f32(rhs)
-    }
-}
-impl core::ops::Mul<f32> for &Vector4 {
-    type Output = Vector4;
-    fn mul(self, rhs: f32) -> Vector4 {
-        self.impl_mul_f32(rhs)
-    }
-}
diff --git a/crates/libs/windows/src/Windows/Foundation/mod.rs b/crates/libs/windows/src/Windows/Foundation/mod.rs
index f05aafbeff..1ba0d86d51 100644
--- a/crates/libs/windows/src/Windows/Foundation/mod.rs
+++ b/crates/libs/windows/src/Windows/Foundation/mod.rs
@@ -3216,15 +3216,5 @@ where
     pub TSender: core::marker::PhantomData<TSender>,
     pub TResult: core::marker::PhantomData<TResult>,
 }
-impl From<core::time::Duration> for TimeSpan {
-    fn from(value: core::time::Duration) -> Self {
-        Self { Duration: (value.as_nanos() / 100) as i64 }
-    }
-}
-impl From<TimeSpan> for core::time::Duration {
-    fn from(value: TimeSpan) -> Self {
-        core::time::Duration::from_nanos((value.Duration * 100) as u64)
-    }
-}
 #[cfg(feature = "implement")]
 core::include!("impl.rs");
diff --git a/crates/libs/windows/src/Windows/Win32/Foundation/mod.rs b/crates/libs/windows/src/Windows/Win32/Foundation/mod.rs
index 3cdd6f0f90..23ecce8104 100644
--- a/crates/libs/windows/src/Windows/Win32/Foundation/mod.rs
+++ b/crates/libs/windows/src/Windows/Win32/Foundation/mod.rs
@@ -11088,290 +11088,3 @@ pub type FARPROC = Option<unsafe extern "system" fn() -> isize>;
 pub type NEARPROC = Option<unsafe extern "system" fn() -> isize>;
 pub type PAPCFUNC = Option<unsafe extern "system" fn(parameter: usize)>;
 pub type PROC = Option<unsafe extern "system" fn() -> isize>;
-impl BOOL {
-    #[inline]
-    pub fn as_bool(self) -> bool {
-        self.0 != 0
-    }
-    #[inline]
-    pub fn ok(self) -> windows_core::Result<()> {
-        if self.as_bool() {
-            Ok(())
-        } else {
-            Err(windows_core::Error::from_win32())
-        }
-    }
-    #[inline]
-    #[track_caller]
-    pub fn unwrap(self) {
-        self.ok().unwrap();
-    }
-    #[inline]
-    #[track_caller]
-    pub fn expect(self, msg: &str) {
-        self.ok().expect(msg);
-    }
-}
-impl From<BOOL> for bool {
-    fn from(value: BOOL) -> Self {
-        value.as_bool()
-    }
-}
-impl From<&BOOL> for bool {
-    fn from(value: &BOOL) -> Self {
-        value.as_bool()
-    }
-}
-impl From<bool> for BOOL {
-    fn from(value: bool) -> Self {
-        if value {
-            Self(1)
-        } else {
-            Self(0)
-        }
-    }
-}
-impl From<&bool> for BOOL {
-    fn from(value: &bool) -> Self {
-        (*value).into()
-    }
-}
-impl PartialEq<bool> for BOOL {
-    fn eq(&self, other: &bool) -> bool {
-        self.as_bool() == *other
-    }
-}
-impl PartialEq<BOOL> for bool {
-    fn eq(&self, other: &BOOL) -> bool {
-        *self == other.as_bool()
-    }
-}
-impl core::ops::Not for BOOL {
-    type Output = Self;
-    fn not(self) -> Self::Output {
-        if self.as_bool() {
-            Self(0)
-        } else {
-            Self(1)
-        }
-    }
-}
-impl windows_core::Param<BOOL> for bool {
-    unsafe fn param(self) -> windows_core::ParamValue<BOOL> {
-        windows_core::ParamValue::Owned(self.into())
-    }
-}
-impl BOOLEAN {
-    #[inline]
-    pub fn as_bool(self) -> bool {
-        self.0 != 0
-    }
-    #[inline]
-    pub fn ok(self) -> windows_core::Result<()> {
-        if self.as_bool() {
-            Ok(())
-        } else {
-            Err(windows_core::Error::from_win32())
-        }
-    }
-    #[inline]
-    #[track_caller]
-    pub fn unwrap(self) {
-        self.ok().unwrap();
-    }
-    #[inline]
-    #[track_caller]
-    pub fn expect(self, msg: &str) {
-        self.ok().expect(msg);
-    }
-}
-impl From<BOOLEAN> for bool {
-    fn from(value: BOOLEAN) -> Self {
-        value.as_bool()
-    }
-}
-impl From<&BOOLEAN> for bool {
-    fn from(value: &BOOLEAN) -> Self {
-        value.as_bool()
-    }
-}
-impl From<bool> for BOOLEAN {
-    fn from(value: bool) -> Self {
-        if value {
-            Self(1)
-        } else {
-            Self(0)
-        }
-    }
-}
-impl From<&bool> for BOOLEAN {
-    fn from(value: &bool) -> Self {
-        (*value).into()
-    }
-}
-impl PartialEq<bool> for BOOLEAN {
-    fn eq(&self, other: &bool) -> bool {
-        self.as_bool() == *other
-    }
-}
-impl PartialEq<BOOLEAN> for bool {
-    fn eq(&self, other: &BOOLEAN) -> bool {
-        *self == other.as_bool()
-    }
-}
-impl core::ops::Not for BOOLEAN {
-    type Output = Self;
-    fn not(self) -> Self::Output {
-        if self.as_bool() {
-            Self(0)
-        } else {
-            Self(1)
-        }
-    }
-}
-impl windows_core::Param<BOOLEAN> for bool {
-    unsafe fn param(self) -> windows_core::ParamValue<BOOLEAN> {
-        windows_core::ParamValue::Owned(self.into())
-    }
-}
-impl NTSTATUS {
-    #[inline]
-    pub const fn is_ok(self) -> bool {
-        self.0 >= 0
-    }
-    #[inline]
-    pub const fn is_err(self) -> bool {
-        !self.is_ok()
-    }
-    #[inline]
-    pub const fn to_hresult(self) -> windows_core::HRESULT {
-        windows_core::HRESULT::from_nt(self.0)
-    }
-    #[inline]
-    pub fn ok(self) -> windows_core::Result<()> {
-        if self.is_ok() {
-            Ok(())
-        } else {
-            Err(self.to_hresult().into())
-        }
-    }
-}
-impl From<NTSTATUS> for windows_core::HRESULT {
-    fn from(value: NTSTATUS) -> Self {
-        value.to_hresult()
-    }
-}
-impl From<NTSTATUS> for windows_core::Error {
-    fn from(value: NTSTATUS) -> Self {
-        value.to_hresult().into()
-    }
-}
-impl VARIANT_BOOL {
-    #[inline]
-    pub fn as_bool(self) -> bool {
-        self.0 != 0
-    }
-    #[inline]
-    pub fn ok(self) -> windows_core::Result<()> {
-        if self.as_bool() {
-            Ok(())
-        } else {
-            Err(windows_core::Error::from_win32())
-        }
-    }
-    #[inline]
-    #[track_caller]
-    pub fn unwrap(self) {
-        self.ok().unwrap();
-    }
-    #[inline]
-    #[track_caller]
-    pub fn expect(self, msg: &str) {
-        self.ok().expect(msg);
-    }
-}
-impl From<VARIANT_BOOL> for bool {
-    fn from(value: VARIANT_BOOL) -> Self {
-        value.as_bool()
-    }
-}
-impl From<&VARIANT_BOOL> for bool {
-    fn from(value: &VARIANT_BOOL) -> Self {
-        value.as_bool()
-    }
-}
-impl From<bool> for VARIANT_BOOL {
-    fn from(value: bool) -> Self {
-        if value {
-            VARIANT_TRUE
-        } else {
-            VARIANT_FALSE
-        }
-    }
-}
-impl From<&bool> for VARIANT_BOOL {
-    fn from(value: &bool) -> Self {
-        (*value).into()
-    }
-}
-impl PartialEq<bool> for VARIANT_BOOL {
-    fn eq(&self, other: &bool) -> bool {
-        self.as_bool() == *other
-    }
-}
-impl PartialEq<VARIANT_BOOL> for bool {
-    fn eq(&self, other: &VARIANT_BOOL) -> bool {
-        *self == other.as_bool()
-    }
-}
-impl core::ops::Not for VARIANT_BOOL {
-    type Output = Self;
-    fn not(self) -> Self::Output {
-        if self.as_bool() {
-            VARIANT_FALSE
-        } else {
-            VARIANT_TRUE
-        }
-    }
-}
-impl WIN32_ERROR {
-    #[inline]
-    pub const fn is_ok(self) -> bool {
-        self.0 == 0
-    }
-    #[inline]
-    pub const fn is_err(self) -> bool {
-        !self.is_ok()
-    }
-    #[inline]
-    pub const fn to_hresult(self) -> windows_core::HRESULT {
-        windows_core::HRESULT::from_win32(self.0)
-    }
-    #[inline]
-    pub fn from_error(error: &windows_core::Error) -> Option<Self> {
-        let hresult = error.code().0 as u32;
-        if ((hresult >> 16) & 0x7FF) == 7 {
-            Some(Self(hresult & 0xFFFF))
-        } else {
-            None
-        }
-    }
-    #[inline]
-    pub fn ok(self) -> windows_core::Result<()> {
-        if self.is_ok() {
-            Ok(())
-        } else {
-            Err(self.to_hresult().into())
-        }
-    }
-}
-impl From<WIN32_ERROR> for windows_core::HRESULT {
-    fn from(value: WIN32_ERROR) -> Self {
-        value.to_hresult()
-    }
-}
-impl From<WIN32_ERROR> for windows_core::Error {
-    fn from(value: WIN32_ERROR) -> Self {
-        value.to_hresult().into()
-    }
-}
diff --git a/crates/libs/windows/src/Windows/Win32/Networking/WinSock/mod.rs b/crates/libs/windows/src/Windows/Win32/Networking/WinSock/mod.rs
index 249838db0b..82933fd984 100644
--- a/crates/libs/windows/src/Windows/Win32/Networking/WinSock/mod.rs
+++ b/crates/libs/windows/src/Windows/Win32/Networking/WinSock/mod.rs
@@ -9395,69 +9395,3 @@ pub type LPWSPSOCKET = Option<unsafe extern "system" fn(af: i32, r#type: i32, pr
 #[cfg(feature = "Win32_System_IO")]
 pub type LPWSPSTARTUP = Option<unsafe extern "system" fn(wversionrequested: u16, lpwspdata: *const WSPDATA, lpprotocolinfo: *const WSAPROTOCOL_INFOW, upcalltable: WSPUPCALLTABLE, lpproctable: *mut WSPPROC_TABLE) -> i32>;
 pub type LPWSPSTRINGTOADDRESS = Option<unsafe extern "system" fn(addressstring: windows_core::PCWSTR, addressfamily: i32, lpprotocolinfo: *const WSAPROTOCOL_INFOW, lpaddress: *mut SOCKADDR, lpaddresslength: *mut i32, lperrno: *mut i32) -> i32>;
-impl From<std::net::Ipv4Addr> for IN_ADDR {
-    fn from(addr: std::net::Ipv4Addr) -> Self {
-        // u32::from(addr) is in host byte order
-        // S_addr must be big-endian, network byte order
-        Self { S_un: IN_ADDR_0 { S_addr: u32::from(addr).to_be() } }
-    }
-}
-impl From<IN_ADDR> for std::net::Ipv4Addr {
-    fn from(in_addr: IN_ADDR) -> Self {
-        // SAFETY: this is safe because the union variants are just views of the same exact data
-        // in_addr.S_un.S_addr is big-endian, network byte order
-        // Ipv4Addr::new() expects the parameter in host byte order
-        Self::from(u32::from_be(unsafe { in_addr.S_un.S_addr }))
-    }
-}
-impl From<std::net::Ipv6Addr> for IN6_ADDR {
-    fn from(addr: std::net::Ipv6Addr) -> Self {
-        Self { u: IN6_ADDR_0 { Byte: addr.octets() } }
-    }
-}
-impl From<IN6_ADDR> for std::net::Ipv6Addr {
-    fn from(in6_addr: IN6_ADDR) -> Self {
-        // SAFETY: this is safe because the union variants are just views of the same exact data
-        Self::from(unsafe { in6_addr.u.Byte })
-    }
-}
-impl From<std::net::SocketAddrV4> for SOCKADDR_IN {
-    fn from(addr: std::net::SocketAddrV4) -> Self {
-        // addr.port() is in host byte order
-        // sin_port must be big-endian, network byte order
-        SOCKADDR_IN { sin_family: AF_INET, sin_port: addr.port().to_be(), sin_addr: (*addr.ip()).into(), ..Default::default() }
-    }
-}
-impl From<std::net::SocketAddrV6> for SOCKADDR_IN6 {
-    fn from(addr: std::net::SocketAddrV6) -> Self {
-        // addr.port() and addr.flowinfo() are in host byte order
-        // sin6_port and sin6_flowinfo must be big-endian, network byte order
-        // sin6_scope_id is a bitfield without endianness
-        SOCKADDR_IN6 {
-            sin6_family: AF_INET6,
-            sin6_port: addr.port().to_be(),
-            sin6_flowinfo: addr.flowinfo().to_be(),
-            sin6_addr: (*addr.ip()).into(),
-            Anonymous: SOCKADDR_IN6_0 { sin6_scope_id: addr.scope_id() },
-            ..Default::default()
-        }
-    }
-}
-impl From<std::net::SocketAddrV4> for SOCKADDR_INET {
-    fn from(addr: std::net::SocketAddrV4) -> Self {
-        SOCKADDR_INET { Ipv4: addr.into() }
-    }
-}
-impl From<std::net::SocketAddrV6> for SOCKADDR_INET {
-    fn from(addr: std::net::SocketAddrV6) -> Self {
-        SOCKADDR_INET { Ipv6: addr.into() }
-    }
-}
-impl From<std::net::SocketAddr> for SOCKADDR_INET {
-    fn from(addr: std::net::SocketAddr) -> Self {
-        match addr {
-            std::net::SocketAddr::V4(socket_addr_v4) => socket_addr_v4.into(),
-            std::net::SocketAddr::V6(socket_addr_v6) => socket_addr_v6.into(),
-        }
-    }
-}
diff --git a/crates/libs/windows/src/Windows/Win32/System/Com/mod.rs b/crates/libs/windows/src/Windows/Win32/System/Com/mod.rs
index 03ff5c386f..706a484e0f 100644
--- a/crates/libs/windows/src/Windows/Win32/System/Com/mod.rs
+++ b/crates/libs/windows/src/Windows/Win32/System/Com/mod.rs
@@ -7664,58 +7664,5 @@ pub type LPEXCEPFINO_DEFERRED_FILLIN = Option<unsafe extern "system" fn(pexcepin
 pub type LPFNCANUNLOADNOW = Option<unsafe extern "system" fn() -> windows_core::HRESULT>;
 pub type LPFNGETCLASSOBJECT = Option<unsafe extern "system" fn(param0: *const windows_core::GUID, param1: *const windows_core::GUID, param2: *mut *mut core::ffi::c_void) -> windows_core::HRESULT>;
 pub type PFNCONTEXTCALL = Option<unsafe extern "system" fn(pparam: *mut ComCallData) -> windows_core::HRESULT>;
-impl From<IDispatch> for windows_core::VARIANT {
-    fn from(value: IDispatch) -> Self {
-        unsafe {
-            Self::from_raw(windows_core::imp::VARIANT {
-                Anonymous: windows_core::imp::VARIANT_0 {
-                    Anonymous: windows_core::imp::VARIANT_0_0 { vt: 9, wReserved1: 0, wReserved2: 0, wReserved3: 0, Anonymous: windows_core::imp::VARIANT_0_0_0 { pdispVal: core::mem::transmute(value) } },
-                },
-            })
-        }
-    }
-}
-
-impl From<IDispatch> for windows_core::PROPVARIANT {
-    fn from(value: IDispatch) -> Self {
-        unsafe {
-            Self::from_raw(windows_core::imp::PROPVARIANT {
-                Anonymous: windows_core::imp::PROPVARIANT_0 {
-                    Anonymous: windows_core::imp::PROPVARIANT_0_0 { vt: 9, wReserved1: 0, wReserved2: 0, wReserved3: 0, Anonymous: windows_core::imp::PROPVARIANT_0_0_0 { pdispVal: core::mem::transmute(value) } },
-                },
-            })
-        }
-    }
-}
-
-impl TryFrom<&windows_core::VARIANT> for IDispatch {
-    type Error = windows_core::Error;
-    fn try_from(from: &windows_core::VARIANT) -> windows_core::Result<Self> {
-        let from = from.as_raw();
-        unsafe {
-            if from.Anonymous.Anonymous.vt == 9 && !from.Anonymous.Anonymous.Anonymous.pdispVal.is_null() {
-                let dispatch: &IDispatch = core::mem::transmute(&from.Anonymous.Anonymous.Anonymous.pdispVal);
-                Ok(dispatch.clone())
-            } else {
-                Err(windows_core::Error::from_hresult(windows_core::imp::TYPE_E_TYPEMISMATCH))
-            }
-        }
-    }
-}
-
-impl TryFrom<&windows_core::PROPVARIANT> for IDispatch {
-    type Error = windows_core::Error;
-    fn try_from(from: &windows_core::PROPVARIANT) -> windows_core::Result<Self> {
-        let from = from.as_raw();
-        unsafe {
-            if from.Anonymous.Anonymous.vt == 9 && !from.Anonymous.Anonymous.Anonymous.pdispVal.is_null() {
-                let dispatch: &IDispatch = core::mem::transmute(&from.Anonymous.Anonymous.Anonymous.pdispVal);
-                Ok(dispatch.clone())
-            } else {
-                Err(windows_core::Error::from_hresult(windows_core::imp::TYPE_E_TYPEMISMATCH))
-            }
-        }
-    }
-}
 #[cfg(feature = "implement")]
 core::include!("impl.rs");
diff --git a/crates/libs/windows/src/Windows/Win32/System/Rpc/mod.rs b/crates/libs/windows/src/Windows/Win32/System/Rpc/mod.rs
index 7a57c16013..ce4d3b2434 100644
--- a/crates/libs/windows/src/Windows/Win32/System/Rpc/mod.rs
+++ b/crates/libs/windows/src/Windows/Win32/System/Rpc/mod.rs
@@ -7088,35 +7088,3 @@ pub type USER_MARSHAL_SIZING_ROUTINE = Option<unsafe extern "system" fn(param0:
 pub type USER_MARSHAL_UNMARSHALLING_ROUTINE = Option<unsafe extern "system" fn(param0: *mut u32, param1: *mut u8, param2: *mut core::ffi::c_void) -> *mut u8>;
 #[cfg(feature = "Win32_System_Com")]
 pub type XMIT_HELPER_ROUTINE = Option<unsafe extern "system" fn(param0: *mut MIDL_STUB_MESSAGE)>;
-impl RPC_STATUS {
-    #[inline]
-    pub const fn is_ok(self) -> bool {
-        self.0 == 0
-    }
-    #[inline]
-    pub const fn is_err(self) -> bool {
-        !self.is_ok()
-    }
-    #[inline]
-    pub const fn to_hresult(self) -> windows_core::HRESULT {
-        windows_core::HRESULT::from_win32(self.0 as u32)
-    }
-    #[inline]
-    pub fn ok(self) -> windows_core::Result<()> {
-        if self.is_ok() {
-            Ok(())
-        } else {
-            Err(self.to_hresult().into())
-        }
-    }
-}
-impl From<RPC_STATUS> for windows_core::HRESULT {
-    fn from(value: RPC_STATUS) -> Self {
-        value.to_hresult()
-    }
-}
-impl From<RPC_STATUS> for windows_core::Error {
-    fn from(value: RPC_STATUS) -> Self {
-        value.to_hresult().into()
-    }
-}
diff --git a/crates/libs/windows/src/Windows/Win32/UI/WindowsAndMessaging/mod.rs b/crates/libs/windows/src/Windows/Win32/UI/WindowsAndMessaging/mod.rs
index 918c9cef80..53d1cb553d 100644
--- a/crates/libs/windows/src/Windows/Win32/UI/WindowsAndMessaging/mod.rs
+++ b/crates/libs/windows/src/Windows/Win32/UI/WindowsAndMessaging/mod.rs
@@ -9426,11 +9426,4 @@ pub type SENDASYNCPROC = Option<unsafe extern "system" fn(param0: super::super::
 pub type TIMERPROC = Option<unsafe extern "system" fn(param0: super::super::Foundation::HWND, param1: u32, param2: usize, param3: u32)>;
 pub type WNDENUMPROC = Option<unsafe extern "system" fn(param0: super::super::Foundation::HWND, param1: super::super::Foundation::LPARAM) -> super::super::Foundation::BOOL>;
 pub type WNDPROC = Option<unsafe extern "system" fn(param0: super::super::Foundation::HWND, param1: u32, param2: super::super::Foundation::WPARAM, param3: super::super::Foundation::LPARAM) -> super::super::Foundation::LRESULT>;
-#[cfg(target_pointer_width = "32")]
-pub use GetWindowLongA as GetWindowLongPtrA;
-#[cfg(target_pointer_width = "32")]
-pub use GetWindowLongW as GetWindowLongPtrW;
-#[cfg(target_pointer_width = "32")]
-pub use SetWindowLongA as SetWindowLongPtrA;
-#[cfg(target_pointer_width = "32")]
-pub use SetWindowLongW as SetWindowLongPtrW;
+core::include!(core::concat!(core::env!("CARGO_MANIFEST_DIR"), "/src/includes/", "Win32/UI/WindowsAndMessaging/WindowLong.rs"));
diff --git a/crates/libs/windows/src/extensions.rs b/crates/libs/windows/src/extensions.rs
new file mode 100644
index 0000000000..caae20dca2
--- /dev/null
+++ b/crates/libs/windows/src/extensions.rs
@@ -0,0 +1,20 @@
+//! Contains extensions to the generated bindings
+//!
+//! This module contains code that extends the functionality of the bindings generated by `bindgen`.
+//! It adds inherent impls, trait impls, etc.
+//!
+//! This module's visibility is `pub(crate)`, not `pub`, because the `extensions` module path is
+//! not intended to be directly visible to user code. Associated functions defined within this
+//! module tree use the visibility of the types they are associated with, and so the visibility
+//! of this module tree does not constrain the visibility of the associated functions. Similarly,
+//! trait impls _themselves_ do not have visibility; their visibility is defined by the types and
+//! traits used in the trait impl definition.
+//!
+//! If it becomes necessary to re-export definitions (types, etc.) defined in this module tree,
+//! then the right thing to do is to change the visibility (along those module paths) to `pub(crate)`
+//! and then to use `pub` for the specific items that will be re-exported.
+
+#[cfg(feature = "Foundation")]
+mod Foundation;
+#[cfg(feature = "Win32")]
+mod Win32;
diff --git a/crates/libs/windows/src/extensions/Foundation.rs b/crates/libs/windows/src/extensions/Foundation.rs
new file mode 100644
index 0000000000..ea4bfd24ee
--- /dev/null
+++ b/crates/libs/windows/src/extensions/Foundation.rs
@@ -0,0 +1,5 @@
+#[cfg(feature = "Foundation_Collections")]
+pub mod Collections;
+#[cfg(feature = "Foundation_Numerics")]
+pub mod Numerics;
+pub mod TimeSpan;
diff --git a/crates/libs/windows/src/extensions/Foundation/Collections.rs b/crates/libs/windows/src/extensions/Foundation/Collections.rs
new file mode 100644
index 0000000000..771b249a74
--- /dev/null
+++ b/crates/libs/windows/src/extensions/Foundation/Collections.rs
@@ -0,0 +1,6 @@
+#[cfg(feature = "implement")]
+pub mod Iterable;
+#[cfg(feature = "implement")]
+pub mod MapView;
+#[cfg(feature = "implement")]
+pub mod VectorView;
diff --git a/crates/libs/bindgen/src/rust/extensions/impl/Foundation/Collections/Iterable.rs b/crates/libs/windows/src/extensions/Foundation/Collections/Iterable.rs
similarity index 87%
rename from crates/libs/bindgen/src/rust/extensions/impl/Foundation/Collections/Iterable.rs
rename to crates/libs/windows/src/extensions/Foundation/Collections/Iterable.rs
index 3a1854cfa4..205a2e48e9 100644
--- a/crates/libs/bindgen/src/rust/extensions/impl/Foundation/Collections/Iterable.rs
+++ b/crates/libs/windows/src/extensions/Foundation/Collections/Iterable.rs
@@ -1,3 +1,5 @@
+use crate::Foundation::Collections::{IIterable, IIterable_Impl, IIterator, IIterator_Impl};
+
 #[windows_core::implement(IIterable<T>)]
 struct StockIterable<T>
 where
@@ -14,11 +16,7 @@ where
 {
     fn First(&self) -> windows_core::Result<IIterator<T>> {
         use windows_core::IUnknownImpl;
-        Ok(windows_core::ComObject::new(StockIterator {
-            owner: self.to_object(),
-            current: 0.into(),
-        })
-        .into_interface())
+        Ok(windows_core::ComObject::new(StockIterator { owner: self.to_object(), current: 0.into() }).into_interface())
     }
 }
 
@@ -60,8 +58,7 @@ where
         let current = self.current.load(std::sync::atomic::Ordering::Relaxed);
 
         if current < owner.values.len() {
-            self.current
-                .fetch_add(1, std::sync::atomic::Ordering::Relaxed);
+            self.current.fetch_add(1, std::sync::atomic::Ordering::Relaxed);
         }
 
         Ok(owner.values.len() > current + 1)
@@ -74,8 +71,7 @@ where
         let actual = std::cmp::min(owner.values.len() - current, values.len());
         let (values, _) = values.split_at_mut(actual);
         values.clone_from_slice(&owner.values[current..current + actual]);
-        self.current
-            .fetch_add(actual, std::sync::atomic::Ordering::Relaxed);
+        self.current.fetch_add(actual, std::sync::atomic::Ordering::Relaxed);
         Ok(actual as u32)
     }
 }
diff --git a/crates/libs/bindgen/src/rust/extensions/impl/Foundation/Collections/MapView.rs b/crates/libs/windows/src/extensions/Foundation/Collections/MapView.rs
similarity index 79%
rename from crates/libs/bindgen/src/rust/extensions/impl/Foundation/Collections/MapView.rs
rename to crates/libs/windows/src/extensions/Foundation/Collections/MapView.rs
index eca599138d..c1ff6cdd35 100644
--- a/crates/libs/bindgen/src/rust/extensions/impl/Foundation/Collections/MapView.rs
+++ b/crates/libs/windows/src/extensions/Foundation/Collections/MapView.rs
@@ -1,3 +1,5 @@
+use crate::Foundation::Collections::{IIterable, IIterable_Impl, IIterator, IIterator_Impl, IKeyValuePair, IKeyValuePair_Impl, IMapView, IMapView_Impl};
+
 #[windows_core::implement(IMapView<K, V>, IIterable<IKeyValuePair<K, V>>)]
 struct StockMapView<K, V>
 where
@@ -19,11 +21,7 @@ where
     fn First(&self) -> windows_core::Result<IIterator<IKeyValuePair<K, V>>> {
         use windows_core::IUnknownImpl;
 
-        Ok(windows_core::ComObject::new(StockMapViewIterator::<K, V> {
-            _owner: self.to_object(),
-            current: std::sync::RwLock::new(self.map.iter()),
-        })
-        .into_interface())
+        Ok(windows_core::ComObject::new(StockMapViewIterator::<K, V> { _owner: self.to_object(), current: std::sync::RwLock::new(self.map.iter()) }).into_interface())
     }
 }
 
@@ -35,10 +33,7 @@ where
     V::Default: Clone,
 {
     fn Lookup(&self, key: &K::Default) -> windows_core::Result<V> {
-        let value = self
-            .map
-            .get(key)
-            .ok_or_else(|| windows_core::Error::from(windows_core::imp::E_BOUNDS))?;
+        let value = self.map.get(key).ok_or_else(|| windows_core::Error::from(windows_core::imp::E_BOUNDS))?;
         V::from_default(value)
     }
     fn Size(&self) -> windows_core::Result<u32> {
@@ -47,11 +42,7 @@ where
     fn HasKey(&self, key: &K::Default) -> windows_core::Result<bool> {
         Ok(self.map.contains_key(key))
     }
-    fn Split(
-        &self,
-        first: &mut Option<IMapView<K, V>>,
-        second: &mut Option<IMapView<K, V>>,
-    ) -> windows_core::Result<()> {
+    fn Split(&self, first: &mut Option<IMapView<K, V>>, second: &mut Option<IMapView<K, V>>) -> windows_core::Result<()> {
         *first = None;
         *second = None;
         Ok(())
@@ -81,11 +72,7 @@ where
         let mut current = self.current.read().unwrap().clone().peekable();
 
         if let Some((key, value)) = current.peek() {
-            Ok(windows_core::ComObject::new(StockKeyValuePair {
-                key: (*key).clone(),
-                value: (*value).clone(),
-            })
-            .into_interface())
+            Ok(windows_core::ComObject::new(StockKeyValuePair { key: (*key).clone(), value: (*value).clone() }).into_interface())
         } else {
             Err(windows_core::Error::from(windows_core::imp::E_BOUNDS))
         }
@@ -110,13 +97,7 @@ where
 
         for pair in pairs {
             if let Some((key, value)) = current.next() {
-                *pair = Some(
-                    windows_core::ComObject::new(StockKeyValuePair {
-                        key: (*key).clone(),
-                        value: (*value).clone(),
-                    })
-                    .into_interface(),
-                );
+                *pair = Some(windows_core::ComObject::new(StockKeyValuePair { key: (*key).clone(), value: (*value).clone() }).into_interface());
                 actual += 1;
             } else {
                 break;
@@ -162,9 +143,7 @@ where
     V::Default: Clone,
 {
     type Error = windows_core::Error;
-    fn try_from(
-        map: std::collections::BTreeMap<K::Default, V::Default>,
-    ) -> windows_core::Result<Self> {
+    fn try_from(map: std::collections::BTreeMap<K::Default, V::Default>) -> windows_core::Result<Self> {
         // TODO: should provide a fallible try_into or more explicit allocator
         Ok(StockMapView { map }.into())
     }
diff --git a/crates/libs/bindgen/src/rust/extensions/impl/Foundation/Collections/VectorView.rs b/crates/libs/windows/src/extensions/Foundation/Collections/VectorView.rs
similarity index 88%
rename from crates/libs/bindgen/src/rust/extensions/impl/Foundation/Collections/VectorView.rs
rename to crates/libs/windows/src/extensions/Foundation/Collections/VectorView.rs
index 94de4e5d05..5021474323 100644
--- a/crates/libs/bindgen/src/rust/extensions/impl/Foundation/Collections/VectorView.rs
+++ b/crates/libs/windows/src/extensions/Foundation/Collections/VectorView.rs
@@ -1,3 +1,5 @@
+use crate::Foundation::Collections::{IIterable, IIterable_Impl, IIterator, IIterator_Impl, IVectorView, IVectorView_Impl};
+
 #[windows_core::implement(IVectorView<T>, IIterable<T>)]
 struct StockVectorView<T>
 where
@@ -15,11 +17,7 @@ where
     fn First(&self) -> windows_core::Result<IIterator<T>> {
         use windows_core::IUnknownImpl;
 
-        Ok(windows_core::ComObject::new(StockVectorViewIterator {
-            owner: self.to_object(),
-            current: 0.into(),
-        })
-        .into_interface())
+        Ok(windows_core::ComObject::new(StockVectorViewIterator { owner: self.to_object(), current: 0.into() }).into_interface())
     }
 }
 
@@ -29,10 +27,7 @@ where
     T::Default: Clone + PartialEq,
 {
     fn GetAt(&self, index: u32) -> windows_core::Result<T> {
-        let item = self
-            .values
-            .get(index as usize)
-            .ok_or_else(|| windows_core::Error::from(windows_core::imp::E_BOUNDS))?;
+        let item = self.values.get(index as usize).ok_or_else(|| windows_core::Error::from(windows_core::imp::E_BOUNDS))?;
         T::from_default(item)
     }
     fn Size(&self) -> windows_core::Result<u32> {
@@ -93,8 +88,7 @@ where
         let current = self.current.load(std::sync::atomic::Ordering::Relaxed);
 
         if current < self.owner.values.len() {
-            self.current
-                .fetch_add(1, std::sync::atomic::Ordering::Relaxed);
+            self.current.fetch_add(1, std::sync::atomic::Ordering::Relaxed);
         }
 
         Ok(self.owner.values.len() > current + 1)
@@ -106,8 +100,7 @@ where
         let actual = std::cmp::min(self.owner.values.len() - current, values.len());
         let (values, _) = values.split_at_mut(actual);
         values.clone_from_slice(&self.owner.values[current..current + actual]);
-        self.current
-            .fetch_add(actual, std::sync::atomic::Ordering::Relaxed);
+        self.current.fetch_add(actual, std::sync::atomic::Ordering::Relaxed);
         Ok(actual as u32)
     }
 }
diff --git a/crates/libs/windows/src/extensions/Foundation/Numerics.rs b/crates/libs/windows/src/extensions/Foundation/Numerics.rs
new file mode 100644
index 0000000000..0f5dc4ba0b
--- /dev/null
+++ b/crates/libs/windows/src/extensions/Foundation/Numerics.rs
@@ -0,0 +1,5 @@
+mod Matrix3x2;
+mod Matrix4x4;
+mod Vector2;
+mod Vector3;
+mod Vector4;
diff --git a/crates/libs/bindgen/src/rust/extensions/mod/Foundation/Numerics/Matrix3x2.rs b/crates/libs/windows/src/extensions/Foundation/Numerics/Matrix3x2.rs
similarity index 98%
rename from crates/libs/bindgen/src/rust/extensions/mod/Foundation/Numerics/Matrix3x2.rs
rename to crates/libs/windows/src/extensions/Foundation/Numerics/Matrix3x2.rs
index d5a132bd06..8d02cc822d 100644
--- a/crates/libs/bindgen/src/rust/extensions/mod/Foundation/Numerics/Matrix3x2.rs
+++ b/crates/libs/windows/src/extensions/Foundation/Numerics/Matrix3x2.rs
@@ -1,3 +1,5 @@
+use crate::Foundation::Numerics::Matrix3x2;
+
 impl Matrix3x2 {
     pub const fn identity() -> Self {
         Self { M11: 1.0, M12: 0.0, M21: 0.0, M22: 1.0, M31: 0.0, M32: 0.0 }
diff --git a/crates/libs/bindgen/src/rust/extensions/mod/Foundation/Numerics/Matrix4x4.rs b/crates/libs/windows/src/extensions/Foundation/Numerics/Matrix4x4.rs
similarity index 99%
rename from crates/libs/bindgen/src/rust/extensions/mod/Foundation/Numerics/Matrix4x4.rs
rename to crates/libs/windows/src/extensions/Foundation/Numerics/Matrix4x4.rs
index 132e8340d7..5048687314 100644
--- a/crates/libs/bindgen/src/rust/extensions/mod/Foundation/Numerics/Matrix4x4.rs
+++ b/crates/libs/windows/src/extensions/Foundation/Numerics/Matrix4x4.rs
@@ -1,3 +1,5 @@
+use crate::Foundation::Numerics::Matrix4x4;
+
 impl Matrix4x4 {
     pub const fn translation(x: f32, y: f32, z: f32) -> Self {
         Self {
diff --git a/crates/libs/bindgen/src/rust/extensions/mod/Foundation/Numerics/Vector2.rs b/crates/libs/windows/src/extensions/Foundation/Numerics/Vector2.rs
similarity index 99%
rename from crates/libs/bindgen/src/rust/extensions/mod/Foundation/Numerics/Vector2.rs
rename to crates/libs/windows/src/extensions/Foundation/Numerics/Vector2.rs
index 3926b0e77e..f2a1d365c4 100644
--- a/crates/libs/bindgen/src/rust/extensions/mod/Foundation/Numerics/Vector2.rs
+++ b/crates/libs/windows/src/extensions/Foundation/Numerics/Vector2.rs
@@ -1,3 +1,5 @@
+use crate::Foundation::Numerics::Vector2;
+
 impl Vector2 {
     pub fn new(X: f32, Y: f32) -> Self {
         Self { X, Y }
diff --git a/crates/libs/bindgen/src/rust/extensions/mod/Foundation/Numerics/Vector3.rs b/crates/libs/windows/src/extensions/Foundation/Numerics/Vector3.rs
similarity index 99%
rename from crates/libs/bindgen/src/rust/extensions/mod/Foundation/Numerics/Vector3.rs
rename to crates/libs/windows/src/extensions/Foundation/Numerics/Vector3.rs
index 3d9cba2933..a99ba3d9f4 100644
--- a/crates/libs/bindgen/src/rust/extensions/mod/Foundation/Numerics/Vector3.rs
+++ b/crates/libs/windows/src/extensions/Foundation/Numerics/Vector3.rs
@@ -1,3 +1,5 @@
+use crate::Foundation::Numerics::Vector3;
+
 impl Vector3 {
     pub fn new(X: f32, Y: f32, Z: f32) -> Self {
         Self { X, Y, Z }
diff --git a/crates/libs/bindgen/src/rust/extensions/mod/Foundation/Numerics/Vector4.rs b/crates/libs/windows/src/extensions/Foundation/Numerics/Vector4.rs
similarity index 99%
rename from crates/libs/bindgen/src/rust/extensions/mod/Foundation/Numerics/Vector4.rs
rename to crates/libs/windows/src/extensions/Foundation/Numerics/Vector4.rs
index e7c4ebf9c3..a0e5346b5b 100644
--- a/crates/libs/bindgen/src/rust/extensions/mod/Foundation/Numerics/Vector4.rs
+++ b/crates/libs/windows/src/extensions/Foundation/Numerics/Vector4.rs
@@ -1,3 +1,5 @@
+use crate::Foundation::Numerics::Vector4;
+
 impl Vector4 {
     pub fn new(X: f32, Y: f32, Z: f32, W: f32) -> Self {
         Self { X, Y, Z, W }
diff --git a/crates/libs/bindgen/src/rust/extensions/mod/Foundation/TimeSpan.rs b/crates/libs/windows/src/extensions/Foundation/TimeSpan.rs
similarity index 90%
rename from crates/libs/bindgen/src/rust/extensions/mod/Foundation/TimeSpan.rs
rename to crates/libs/windows/src/extensions/Foundation/TimeSpan.rs
index 510fd18a53..6fb2fd69b5 100644
--- a/crates/libs/bindgen/src/rust/extensions/mod/Foundation/TimeSpan.rs
+++ b/crates/libs/windows/src/extensions/Foundation/TimeSpan.rs
@@ -1,3 +1,5 @@
+use crate::Foundation::TimeSpan;
+
 impl From<core::time::Duration> for TimeSpan {
     fn from(value: core::time::Duration) -> Self {
         Self { Duration: (value.as_nanos() / 100) as i64 }
diff --git a/crates/libs/windows/src/extensions/Win32.rs b/crates/libs/windows/src/extensions/Win32.rs
new file mode 100644
index 0000000000..d5cdfbb870
--- /dev/null
+++ b/crates/libs/windows/src/extensions/Win32.rs
@@ -0,0 +1,6 @@
+#[cfg(feature = "Win32_Foundation")]
+mod Foundation;
+#[cfg(feature = "Win32_Networking")]
+mod Networking;
+#[cfg(feature = "Win32_System")]
+mod System;
diff --git a/crates/libs/windows/src/extensions/Win32/Foundation.rs b/crates/libs/windows/src/extensions/Win32/Foundation.rs
new file mode 100644
index 0000000000..0008cd07fb
--- /dev/null
+++ b/crates/libs/windows/src/extensions/Win32/Foundation.rs
@@ -0,0 +1,5 @@
+pub mod BOOL;
+pub mod BOOLEAN;
+pub mod NTSTATUS;
+pub mod VARIANT_BOOL;
+pub mod WIN32_ERROR;
diff --git a/crates/libs/bindgen/src/rust/extensions/mod/Win32/Foundation/BOOL.rs b/crates/libs/windows/src/extensions/Win32/Foundation/BOOL.rs
similarity index 97%
rename from crates/libs/bindgen/src/rust/extensions/mod/Win32/Foundation/BOOL.rs
rename to crates/libs/windows/src/extensions/Win32/Foundation/BOOL.rs
index 60cfd39fca..42bc5d9f00 100644
--- a/crates/libs/bindgen/src/rust/extensions/mod/Win32/Foundation/BOOL.rs
+++ b/crates/libs/windows/src/extensions/Win32/Foundation/BOOL.rs
@@ -1,3 +1,5 @@
+use crate::Win32::Foundation::BOOL;
+
 impl BOOL {
     #[inline]
     pub fn as_bool(self) -> bool {
diff --git a/crates/libs/bindgen/src/rust/extensions/mod/Win32/Foundation/BOOLEAN.rs b/crates/libs/windows/src/extensions/Win32/Foundation/BOOLEAN.rs
similarity index 97%
rename from crates/libs/bindgen/src/rust/extensions/mod/Win32/Foundation/BOOLEAN.rs
rename to crates/libs/windows/src/extensions/Win32/Foundation/BOOLEAN.rs
index 7f6a9cc20d..43dd9dffed 100644
--- a/crates/libs/bindgen/src/rust/extensions/mod/Win32/Foundation/BOOLEAN.rs
+++ b/crates/libs/windows/src/extensions/Win32/Foundation/BOOLEAN.rs
@@ -1,3 +1,5 @@
+use crate::Win32::Foundation::BOOLEAN;
+
 impl BOOLEAN {
     #[inline]
     pub fn as_bool(self) -> bool {
diff --git a/crates/libs/bindgen/src/rust/extensions/mod/Win32/Foundation/NTSTATUS.rs b/crates/libs/windows/src/extensions/Win32/Foundation/NTSTATUS.rs
similarity index 94%
rename from crates/libs/bindgen/src/rust/extensions/mod/Win32/Foundation/NTSTATUS.rs
rename to crates/libs/windows/src/extensions/Win32/Foundation/NTSTATUS.rs
index 2ec25a8cef..2d40cf001f 100644
--- a/crates/libs/bindgen/src/rust/extensions/mod/Win32/Foundation/NTSTATUS.rs
+++ b/crates/libs/windows/src/extensions/Win32/Foundation/NTSTATUS.rs
@@ -1,3 +1,5 @@
+use crate::Win32::Foundation::NTSTATUS;
+
 impl NTSTATUS {
     #[inline]
     pub const fn is_ok(self) -> bool {
diff --git a/crates/libs/bindgen/src/rust/extensions/mod/Win32/Foundation/VARIANT_BOOL.rs b/crates/libs/windows/src/extensions/Win32/Foundation/VARIANT_BOOL.rs
similarity index 95%
rename from crates/libs/bindgen/src/rust/extensions/mod/Win32/Foundation/VARIANT_BOOL.rs
rename to crates/libs/windows/src/extensions/Win32/Foundation/VARIANT_BOOL.rs
index 2505030176..a212eb8e56 100644
--- a/crates/libs/bindgen/src/rust/extensions/mod/Win32/Foundation/VARIANT_BOOL.rs
+++ b/crates/libs/windows/src/extensions/Win32/Foundation/VARIANT_BOOL.rs
@@ -1,3 +1,5 @@
+use crate::Win32::Foundation::{VARIANT_BOOL, VARIANT_FALSE, VARIANT_TRUE};
+
 impl VARIANT_BOOL {
     #[inline]
     pub fn as_bool(self) -> bool {
diff --git a/crates/libs/bindgen/src/rust/extensions/mod/Win32/Foundation/WIN32_ERROR.rs b/crates/libs/windows/src/extensions/Win32/Foundation/WIN32_ERROR.rs
similarity index 95%
rename from crates/libs/bindgen/src/rust/extensions/mod/Win32/Foundation/WIN32_ERROR.rs
rename to crates/libs/windows/src/extensions/Win32/Foundation/WIN32_ERROR.rs
index 3b0579b354..91ee28549a 100644
--- a/crates/libs/bindgen/src/rust/extensions/mod/Win32/Foundation/WIN32_ERROR.rs
+++ b/crates/libs/windows/src/extensions/Win32/Foundation/WIN32_ERROR.rs
@@ -1,3 +1,5 @@
+use crate::Win32::Foundation::WIN32_ERROR;
+
 impl WIN32_ERROR {
     #[inline]
     pub const fn is_ok(self) -> bool {
diff --git a/crates/libs/windows/src/extensions/Win32/Networking.rs b/crates/libs/windows/src/extensions/Win32/Networking.rs
new file mode 100644
index 0000000000..ca8553e493
--- /dev/null
+++ b/crates/libs/windows/src/extensions/Win32/Networking.rs
@@ -0,0 +1,2 @@
+#[cfg(feature = "Win32_Networking_WinSock")]
+mod WinSock;
diff --git a/crates/libs/windows/src/extensions/Win32/Networking/WinSock.rs b/crates/libs/windows/src/extensions/Win32/Networking/WinSock.rs
new file mode 100644
index 0000000000..6e8be61482
--- /dev/null
+++ b/crates/libs/windows/src/extensions/Win32/Networking/WinSock.rs
@@ -0,0 +1,5 @@
+mod IN6_ADDR;
+mod IN_ADDR;
+mod SOCKADDR_IN;
+mod SOCKADDR_IN6;
+mod SOCKADDR_INET;
diff --git a/crates/libs/bindgen/src/rust/extensions/mod/Win32/Networking/WinSock/IN6_ADDR.rs b/crates/libs/windows/src/extensions/Win32/Networking/WinSock/IN6_ADDR.rs
similarity index 86%
rename from crates/libs/bindgen/src/rust/extensions/mod/Win32/Networking/WinSock/IN6_ADDR.rs
rename to crates/libs/windows/src/extensions/Win32/Networking/WinSock/IN6_ADDR.rs
index a0b37a987f..15a264c633 100644
--- a/crates/libs/bindgen/src/rust/extensions/mod/Win32/Networking/WinSock/IN6_ADDR.rs
+++ b/crates/libs/windows/src/extensions/Win32/Networking/WinSock/IN6_ADDR.rs
@@ -1,3 +1,5 @@
+use crate::Win32::Networking::WinSock::{IN6_ADDR, IN6_ADDR_0};
+
 impl From<std::net::Ipv6Addr> for IN6_ADDR {
     fn from(addr: std::net::Ipv6Addr) -> Self {
         Self { u: IN6_ADDR_0 { Byte: addr.octets() } }
diff --git a/crates/libs/bindgen/src/rust/extensions/mod/Win32/Networking/WinSock/IN_ADDR.rs b/crates/libs/windows/src/extensions/Win32/Networking/WinSock/IN_ADDR.rs
similarity index 91%
rename from crates/libs/bindgen/src/rust/extensions/mod/Win32/Networking/WinSock/IN_ADDR.rs
rename to crates/libs/windows/src/extensions/Win32/Networking/WinSock/IN_ADDR.rs
index 9e62b65198..b112e6dca9 100644
--- a/crates/libs/bindgen/src/rust/extensions/mod/Win32/Networking/WinSock/IN_ADDR.rs
+++ b/crates/libs/windows/src/extensions/Win32/Networking/WinSock/IN_ADDR.rs
@@ -1,3 +1,5 @@
+use crate::Win32::Networking::WinSock::{IN_ADDR, IN_ADDR_0};
+
 impl From<std::net::Ipv4Addr> for IN_ADDR {
     fn from(addr: std::net::Ipv4Addr) -> Self {
         // u32::from(addr) is in host byte order
diff --git a/crates/libs/bindgen/src/rust/extensions/mod/Win32/Networking/WinSock/SOCKADDR_IN.rs b/crates/libs/windows/src/extensions/Win32/Networking/WinSock/SOCKADDR_IN.rs
similarity index 84%
rename from crates/libs/bindgen/src/rust/extensions/mod/Win32/Networking/WinSock/SOCKADDR_IN.rs
rename to crates/libs/windows/src/extensions/Win32/Networking/WinSock/SOCKADDR_IN.rs
index bc305f44ee..7ef33f454d 100644
--- a/crates/libs/bindgen/src/rust/extensions/mod/Win32/Networking/WinSock/SOCKADDR_IN.rs
+++ b/crates/libs/windows/src/extensions/Win32/Networking/WinSock/SOCKADDR_IN.rs
@@ -1,3 +1,5 @@
+use crate::Win32::Networking::WinSock::{AF_INET, SOCKADDR_IN};
+
 impl From<std::net::SocketAddrV4> for SOCKADDR_IN {
     fn from(addr: std::net::SocketAddrV4) -> Self {
         // addr.port() is in host byte order
diff --git a/crates/libs/bindgen/src/rust/extensions/mod/Win32/Networking/WinSock/SOCKADDR_IN6.rs b/crates/libs/windows/src/extensions/Win32/Networking/WinSock/SOCKADDR_IN6.rs
similarity index 88%
rename from crates/libs/bindgen/src/rust/extensions/mod/Win32/Networking/WinSock/SOCKADDR_IN6.rs
rename to crates/libs/windows/src/extensions/Win32/Networking/WinSock/SOCKADDR_IN6.rs
index c494e3e1e2..331e61f5e5 100644
--- a/crates/libs/bindgen/src/rust/extensions/mod/Win32/Networking/WinSock/SOCKADDR_IN6.rs
+++ b/crates/libs/windows/src/extensions/Win32/Networking/WinSock/SOCKADDR_IN6.rs
@@ -1,3 +1,5 @@
+use crate::Win32::Networking::WinSock::{AF_INET6, SOCKADDR_IN6, SOCKADDR_IN6_0};
+
 impl From<std::net::SocketAddrV6> for SOCKADDR_IN6 {
     fn from(addr: std::net::SocketAddrV6) -> Self {
         // addr.port() and addr.flowinfo() are in host byte order
diff --git a/crates/libs/bindgen/src/rust/extensions/mod/Win32/Networking/WinSock/SOCKADDR_INET.rs b/crates/libs/windows/src/extensions/Win32/Networking/WinSock/SOCKADDR_INET.rs
similarity index 91%
rename from crates/libs/bindgen/src/rust/extensions/mod/Win32/Networking/WinSock/SOCKADDR_INET.rs
rename to crates/libs/windows/src/extensions/Win32/Networking/WinSock/SOCKADDR_INET.rs
index a86d289579..02460839e9 100644
--- a/crates/libs/bindgen/src/rust/extensions/mod/Win32/Networking/WinSock/SOCKADDR_INET.rs
+++ b/crates/libs/windows/src/extensions/Win32/Networking/WinSock/SOCKADDR_INET.rs
@@ -1,3 +1,5 @@
+use crate::Win32::Networking::WinSock::SOCKADDR_INET;
+
 impl From<std::net::SocketAddrV4> for SOCKADDR_INET {
     fn from(addr: std::net::SocketAddrV4) -> Self {
         SOCKADDR_INET { Ipv4: addr.into() }
diff --git a/crates/libs/windows/src/extensions/Win32/System.rs b/crates/libs/windows/src/extensions/Win32/System.rs
new file mode 100644
index 0000000000..167a10c940
--- /dev/null
+++ b/crates/libs/windows/src/extensions/Win32/System.rs
@@ -0,0 +1,4 @@
+#[cfg(feature = "Win32_System_Com")]
+mod Com;
+#[cfg(feature = "Win32_System_Rpc")]
+mod Rpc;
diff --git a/crates/libs/windows/src/extensions/Win32/System/Com.rs b/crates/libs/windows/src/extensions/Win32/System/Com.rs
new file mode 100644
index 0000000000..20ce5d02f4
--- /dev/null
+++ b/crates/libs/windows/src/extensions/Win32/System/Com.rs
@@ -0,0 +1 @@
+pub mod IDispatch;
diff --git a/crates/libs/bindgen/src/rust/extensions/mod/Win32/System/Com/IDispatch.rs b/crates/libs/windows/src/extensions/Win32/System/Com/IDispatch.rs
similarity index 98%
rename from crates/libs/bindgen/src/rust/extensions/mod/Win32/System/Com/IDispatch.rs
rename to crates/libs/windows/src/extensions/Win32/System/Com/IDispatch.rs
index 84162b72fe..cf6a7070f6 100644
--- a/crates/libs/bindgen/src/rust/extensions/mod/Win32/System/Com/IDispatch.rs
+++ b/crates/libs/windows/src/extensions/Win32/System/Com/IDispatch.rs
@@ -1,3 +1,5 @@
+use crate::Win32::System::Com::IDispatch;
+
 impl From<IDispatch> for windows_core::VARIANT {
     fn from(value: IDispatch) -> Self {
         unsafe {
diff --git a/crates/libs/windows/src/extensions/Win32/System/Rpc.rs b/crates/libs/windows/src/extensions/Win32/System/Rpc.rs
new file mode 100644
index 0000000000..b01ed132e6
--- /dev/null
+++ b/crates/libs/windows/src/extensions/Win32/System/Rpc.rs
@@ -0,0 +1 @@
+mod RPC_STATUS;
diff --git a/crates/libs/bindgen/src/rust/extensions/mod/Win32/System/Rpc/RPC_STATUS.rs b/crates/libs/windows/src/extensions/Win32/System/Rpc/RPC_STATUS.rs
similarity index 94%
rename from crates/libs/bindgen/src/rust/extensions/mod/Win32/System/Rpc/RPC_STATUS.rs
rename to crates/libs/windows/src/extensions/Win32/System/Rpc/RPC_STATUS.rs
index fb79efb70d..f8a78d94c5 100644
--- a/crates/libs/bindgen/src/rust/extensions/mod/Win32/System/Rpc/RPC_STATUS.rs
+++ b/crates/libs/windows/src/extensions/Win32/System/Rpc/RPC_STATUS.rs
@@ -1,3 +1,5 @@
+use crate::Win32::System::Rpc::RPC_STATUS;
+
 impl RPC_STATUS {
     #[inline]
     pub const fn is_ok(self) -> bool {
diff --git a/crates/libs/windows/src/includes/Win32/UI/WindowsAndMessaging/WindowLong.rs b/crates/libs/windows/src/includes/Win32/UI/WindowsAndMessaging/WindowLong.rs
new file mode 100644
index 0000000000..d98a5511a5
--- /dev/null
+++ b/crates/libs/windows/src/includes/Win32/UI/WindowsAndMessaging/WindowLong.rs
@@ -0,0 +1,8 @@
+#[cfg(target_pointer_width = "32")]
+pub use GetWindowLongA as GetWindowLongPtrA;
+#[cfg(target_pointer_width = "32")]
+pub use GetWindowLongW as GetWindowLongPtrW;
+#[cfg(target_pointer_width = "32")]
+pub use SetWindowLongA as SetWindowLongPtrA;
+#[cfg(target_pointer_width = "32")]
+pub use SetWindowLongW as SetWindowLongPtrW;
diff --git a/crates/libs/windows/src/lib.rs b/crates/libs/windows/src/lib.rs
index 3072303ccc..9cb770d101 100644
--- a/crates/libs/windows/src/lib.rs
+++ b/crates/libs/windows/src/lib.rs
@@ -17,4 +17,6 @@ extern crate self as windows;
 
 pub use windows_core as core;
 
+mod extensions;
+
 include!("Windows/mod.rs");