aboutsummaryrefslogtreecommitdiffstats
path: root/api/adapter.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* api: implement %r format type for logging registry pathsr/simons-wild-n-crazy-printfSimon Rozman2021-02-061-31/+9
| | | | | Note: Once reviewed, merge with 728d6762cd95394f2541d4a3f3e7fdd17ecd8f2a Signed-off-by: Simon Rozman <simon@rozman.si>
* api: upgrade loggingSimon Rozman2021-02-051-112/+177
| | | | | | | Log runtime information to quickly check whether the values are sane when analyzing error logs sent in by users. Signed-off-by: Simon Rozman <simon@rozman.si>
* api: tighten function parameter code analysis annotationsSimon Rozman2021-02-041-6/+5
| | | | Signed-off-by: Simon Rozman <simon@rozman.si>
* api: unify NetCfgInstanceId registry retrievalSimon Rozman2021-02-041-26/+22
| | | | Signed-off-by: Simon Rozman <simon@rozman.si>
* api: ensure that device object exists before returning from open/create0.10.1Jason A. Donenfeld2021-02-031-13/+62
| | | | | | | | | | | | | | | | | Some users are seeing errors like this after rebooting from Windows Update: 2021-01-28 18:39:45.220197: [TUN] Creating Wintun interface 2021-01-28 18:39:49.420116: [TUN] [Wintun] CreateAdapter: Creating adapter 2021-01-28 18:39:53.704007: [TUN] [Wintun] OpenDeviceObject: Failed to connect to adapter: The system cannot find the path specified. (Code 0x00000003) 2021-01-28 18:39:53.704007: [TUN] [Wintun] WintunStartSession: Failed to open adapter device object 2021-01-28 18:39:54.097037: [TUN] Unable to create Wintun interface: Error starting session: The system cannot find the path specified. It appears that creation of the device object file might happen asynchronously, so this commit polls for it. Reported-by: Artem Kuroptev <artem@kuroptev.com> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* global: bump copyrightJason A. Donenfeld2021-01-301-1/+1
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: use custom devpkey for poolJason A. Donenfeld2021-01-301-2/+28
| | | | | | | | | | It seems like the friendly name is still getting reset sometimes. Rather than swimming upstream, it turns out we can just use a custom devpkey that, according to msdn, is respected. https://docs.microsoft.com/en-us/windows-hardware/drivers/install/creating-custom-device-properties Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: do not make dead gateway detection failures fatal0.9.1Jason A. Donenfeld2020-11-171-1/+1
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: retry on ERROR_TRANSACTION_NOT_ACTIVE when disabling dead GW detectSimon Rozman2020-11-171-18/+27
| | | | | | | | There seems to be a race in the TCP/IP adapter registry key. Sometimes, the adapter TCP/IP key is created, but setting the value EnableDeadGWDetect fails with ERROR_TRANSACTION_NOT_ACTIVE. Signed-off-by: Simon Rozman <simon@rozman.si>
* api: relax IsPoolMember estimationJason A. Donenfeld2020-11-091-27/+14
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: do not call UpdateDriverForPlugAndPlayDevicesWJason A. Donenfeld2020-11-091-10/+2
| | | | | | | This seems to reset a number of device properties, and our update flow seems to update old adapters without needing to call this. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: take pool mutex when deletingJason A. Donenfeld2020-11-091-1/+10
| | | | | | | This prevents us from racing with driver deletion. Mutexes are recursive, so we shouldn't deadlock if called from Enum. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: account for adapter disappearing during deletionJason A. Donenfeld2020-11-091-4/+6
| | | | | | This makes the race less fatal. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: avoid loading version.dll if not usedJason A. Donenfeld2020-11-061-3/+14
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: remove WintunOpenAdapterDeviceObjectJason A. Donenfeld2020-11-051-1/+1
| | | | | | | Discourage use of kernel interface, which gives us more flexibility if we ever want to change it. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: rename WintunGetAdapter to WintunOpenAdapterJason A. Donenfeld2020-11-051-1/+1
| | | | | | "Create" and "Open" natural names for these. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: CALLBACK_FUNC -> CALLBACKJason A. Donenfeld2020-11-041-1/+1
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: rename GetVersion to GetRunningDriverVersionJason A. Donenfeld2020-11-041-2/+2
| | | | | | | This makes our intentions a lot more clear, and in case we ever add other version functions, makes the forward path simpler. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: use a logging alloc functionJason A. Donenfeld2020-11-041-66/+37
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: include the rundll32 helpers the MSVC-typical waySimon Rozman2020-11-041-1/+1
| | | | Signed-off-by: Simon Rozman <simon@rozman.si>
* api: translate NTSTATUS to Win32 error codesSimon Rozman2020-11-041-1/+1
| | | | Signed-off-by: Simon Rozman <simon@rozman.si>
* api: use GetLastError() to report failures like standard Win32Simon Rozman2020-11-041-538/+641
| | | | Signed-off-by: Simon Rozman <simon@rozman.si>
* wintun: extract inf driverver at compile time into C headerJason A. Donenfeld2020-11-031-111/+4
| | | | | | | | | | | | This requires us to make some insane conversions between INF date, JavaScript time, and finally Windows file time. The point is to mimic SystemTimeToFileTime, which is what SpInf.dll's pSetupStringToDriverDate does on the YYYY-MM-DD from the INF. The result is that we no longer have to parse an ancient text format in C at runtime. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: move undocumented ntdll symbols to ntdll.hJason A. Donenfeld2020-11-031-12/+1
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: constify pool argumentJason A. Donenfeld2020-11-031-2/+2
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: remove guid getterJason A. Donenfeld2020-11-031-6/+0
| | | | | | | | | The iphlpapi takes both LUIDs and GUIDs but prefers LUIDs, so exposing the NET_LUID makes sense. However, we were previously exposing the configuration GUID, rather than the net GUID, which is confusing, so just make it all go away. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: use 'open' name since caller must close handleJason A. Donenfeld2020-11-031-1/+1
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: add pool/driver removal for uninstaller semanticsJason A. Donenfeld2020-11-031-8/+33
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: only return top two version nibblesJason A. Donenfeld2020-11-031-5/+5
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: prevent double SetupDiDestroyDriverInfoList calls on errorSimon Rozman2020-11-031-6/+10
| | | | Signed-off-by: Simon Rozman <simon@rozman.si>
* api: rundll32: repair token spawning semanticsJason A. Donenfeld2020-11-031-5/+4
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: refactor .inf parsing and check SystemTimeToFileTime for errorsSimon Rozman2020-11-031-29/+31
| | | | Signed-off-by: Simon Rozman <simon@rozman.si>
* api: simplify IsOurDrvInfoDetail()Simon Rozman2020-11-031-3/+6
| | | | Signed-off-by: Simon Rozman <simon@rozman.si>
* api: ensure more code compiles by using dead code eliminationJason A. Donenfeld2020-11-031-22/+13
| | | | | | | | | | | | | | It'd be nicer to do this via if (is_defined(HAVE_WHATEVER)) But MSVC won't work with the linux kernel macros for this. Ongoing research. Nevertheless, this makes most of the program always pass through the compiler's type checker, only to have dead code removed later. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: begin to separate rundll32 jumpsJason A. Donenfeld2020-11-031-332/+6
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: free beginning of heap objectJason A. Donenfeld2020-11-021-6/+6
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: pass around NET_LUID instead of LUIDJason A. Donenfeld2020-11-021-3/+4
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: return correct error when there's a duplicateJason A. Donenfeld2020-11-021-1/+2
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: install driver on demandSimon Rozman2020-11-021-318/+555
| | | | | | ...and add API for uninstalling it. Signed-off-by: Simon Rozman <simon@rozman.si>
* api: statically compile devpkey constantsJason A. Donenfeld2020-11-021-4/+2
| | | | | | | I don't like this solution, but I don't see much other choice. It's not in uuid.lib or anywhere like that. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: serialize driver installationJason A. Donenfeld2020-11-021-5/+13
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: map cr errors to win32 errorsJason A. Donenfeld2020-11-021-12/+8
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: simplify and unify error messagesSimon Rozman2020-11-021-45/+45
| | | | Signed-off-by: Simon Rozman <simon@rozman.si>
* api: pnf param is noneJason A. Donenfeld2020-11-021-1/+1
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: make version function uniformJason A. Donenfeld2020-11-021-4/+4
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: avoid call to CM_Get_DevNode_StatusJason A. Donenfeld2020-11-021-36/+25
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: check for duplicate adapter statusJason A. Donenfeld2020-11-021-3/+55
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: separate out driver installationJason A. Donenfeld2020-11-021-138/+149
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: cleanup namesJason A. Donenfeld2020-11-011-1/+1
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* api: account for nt path to moduleJason A. Donenfeld2020-11-011-14/+8
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>